Simplified Codecs and added BSON

Now writing codecs is as easy as calling the `qp.NewCodec` method and passing in the `Marshal` and `Unmarshal` funcs as arguments.

So the JSON codec is now this:

```
// JSON is a Codec that talks JSON.
var JSON = NewCodec(func(object interface{}) ([]byte, error) {
	return json.Marshal(object)
}, func(data []byte, to interface{}) error {
	return json.Unmarshal(data, to)
})
```