Streaming Maximum Matching in a Few Passes: Algorithms and Lower Bounds