support for case classes defined in traits

There is a downside! In order for this to work relative naming of types
is used. This means type is referenced by it's name not by FQDN ->
com.example.Clazz.Inside becomes Inside. And this enables referencing
Inside from Clazz and also from anywhere else where you have an instance
of Object and you imported instance.Inside. The downside comes with packages
and objects. Should Clazz rather be pkg(package) or Object(object) you may
reason that FormatBSON[com.example.Object.Inside] should work but it doesn't
since it uses relative naming nad it only takes the name of given type.
Luckily there is an easy workaround: just import the damn thing. Or if you
don't want to pollute local scope you can create a format inside a block
like in "not polluting local scope demo".