Parallelizing Irregular Applications for Distributed Memory Scalability: Case Studies from Genomics