Return remaining unparsed data from parse functions

This depends on ashfall's PR #4, so it currently contains her code from there. The diff will make more sense when that's already merged.
Wouldn't it make more sense for this to take a `BytesIO` and just have it leave the rest of the stuff in it? This having each packet-parse copy all the crap into a BytesIO, then copy it all out is going to be a /ton/ of overhead.