Allow a MCRequest to parse itself from an io.Reader

This is particularly useful in tap, but it also seems to be a slightly
better structure with less code that's faster.