refactor(driver-compat) add protected methods to BasicBSONEncoder

I decided to add back all 'protected void put*' methods. If you are extending this class - you don't want to override the entire encoding routine, you just need a way of change it a bit. This is where this methods come handy.
Also this lead to another change - BasicBSONEncoder now directly working with BSONBinaryWriter and not using any Codec for that. I think it's the right way - you don't need additional class and it looks more natural. So now you have 2 options - if you set a DBEncoder for your write operation - you will use BSONEncoder stuff, if not - you go with new shiny DBObjectCodec.