bson: unmarshal revamped

Previous bson unmarshal had a few holes, especially
around null values and interfaces. The code was also
not very readable because of the back and forth between
go types and bson types.
The new rewrite bases decisions driven by the go types,
and is more compact and readable.
bson: no custom unmarshaler for map values

Since we can't custom marshal map values, we shouldn't
support unmarshal. This keeps things consistent.
bson: more code reorg

Also, arrays and slices can be encoded as top
level documents without embedding.
bson: more cleanup and documentation
bson: comprehensive table driven tests WIP
bson: more tests added
bson: moar tests
bson: even moar tests
bson: allow nil values as unmarshal input
Merge branch 'bson'