decodes the dbo as type A using the in-scope DecodeBson instance for A
extracts the field named by k and decodes it using a DecodeBsonField for type A
if k is present in the dbo, extracts and decodes it as Some(a: A); returns None if not present.
if k is present in the dbo, extracts and decodes it as Some(a: A); returns None if not present.
fieldOpt[A](field)
should be equivalent to
field[Option[A]](key)
wraps up DBObjects so that various decode methods can be used on them