POC of byte copying for mongodump

NOTE: The code below is just a hacked together proof of concept, and not meant to be merged!

Hi Gustavo,

As promised, here is a proof of concept for copying bson bytes directly from the server's response to a byte slice. First, let me give you the full context: 

For the mongodump tool, we need to be able to read all of the documents from a given collection and write them to disk, in raw BSON binary, as fast as possible. This specific (and relatively niche) use-case does not require unmarshalling the server's response--we, ideally, can just check for errors and then write the raw binary straight to disk. 

Our current prototype of mongodump does this by unmarshalling to a bson.Raw, which provides the usability we need, but is much too slow. The current prototype takes ~8 times longer to dump a collection than the existing C++ implementation. After profiling, it became apparent that this was caused by two things: (1) the large amount of reflect magic in bson Unmarshal and (2) garbage collection dealing with the allocation of millions of temporary buffers. 

The quick hack in this pull request gets around these issues by skipping all of the reflection in Unmarshal and by allowing us to reuse the same 16MB buffers, saving on garbage collection. Using this new NextCopyBytes method, our prototype runs at equivalent speed to the original C++ mongodump! 

Obviously, the code here is just an illustration of what we need. I am very interested in hearing your thoughts on this problem, and how you feel a solution could be best added to the current mgo API. Let me know of any questions you have. Happy to help with implementation any way I can.

Thanks!
-Kyle