Raise an error when trying to convert an unregistered class into a uPy object

And move FromPyObj implementation for native classes into ClassWrapper,
so it's next to it's counterpart AsPyObj
Allow custom converter function for native classes

This solves definitions from one dynamic module not being available in another one.
Suppose there's A.pyd and B.pyd, and A.pyd provides the ClassWrapper
for a native X class while in B.pyd there's a native function returning an instance
of X. Now if in python you'd write

  import A
  import B

  x = B.CreateX();

then in would return in x being an object with an empty type:
ClassWrapper< X >::AsPyObj would correctly return an object, but since ClassWrapper< X >
was never instantiated in B.pyd the type member is null and we're left with
an object without a type.
So the idea is A.pyd exports a function with an mp_obj_t( X* ) signature,
forwarding it to it's own ClassWrapper< X >::AsPyObj since that has the proper
type definition, and B uses that function to convert X instances.
To accomodate this ClassWarpper::Def takes such a converter as second argument.