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.