Improvements to TBSONProtocol.

1) Move value wire type inference code to its own file.
2) Infer wire types of set, list and map members, so we can provide more precise information
   to thrift interactions.
3) More robust support of string represented as binary, and vice versa.
4) Random comment nits.

These are all needed to support handling unknown fields.