Always register __del__ to avoid memory leaks
Extract underlying-type-specific stuff from ClassWrapper
Use shared_ptr instead of raw pointer as underlying type in ClassWrapper

Passing around raw pointers can be dangerous when gc comes into play.
Condider this, where X and Y are both created With ClassWrapper, and
Y::Store() takes an X* or X& and keeps a pointer to it internally:

  y = Y()
  y.Store( X() )
  gc.collect()

The last line will correctly get rid of the ClassWrapper instance for the X
object that was created, but now y has a pointer to a deleted X.
The only proper way around is using shared_ptr instead: if ClassWrapper has a
shared_ptr< X >, Store takes a shared_ptr< X > (which it should do after all
if it's planning to keep the argument longer then the function scope) and
we pass a copy of ClassWrapper's object to Store, all is fine: when deleting
the garbage collected object, shared_ptr's destructor is called but the object
is not deleted unless there are no references anymore.
Merge branch 'refcounted'
Add unsigned/float types