Various additions/tests

Hi there!

I've been sitting on these changes for a while now and thought that it was better to just make a pull request now. The biggest changes here are that 1) you no longer have to care about BSONObjects as a user and 2) there are more tests. I've also refactored a fair bit of the code to make it more Julian.

Thanks for making this in the first place! Cheers.