Algorithms for bipartite matching problems with connections to sparsification and streaming