Resolve "Refactor API conversion types"
This MR separates the functionality of managed_rpc_type<T> into
dedicated lifetime management types and conversion functions. This
makes for clearer the code since it is now possible to know when
a conversion is performed.
Lifetime management for C-types is now done with the managed_ctype<T>
types, which act only as holders of dynamically allocated C types and do not
perform any type conversions whatsoever.
Type conversions are now done with the T1 convert(T2 obj) family of functions.
When converting from CXX to C API types, these functions effectively
return instances of the appropriate managed_ctype<T>s. If one wishes to
relinquish ownership of the content of the managed_ctype<T> (e.g. to
pass it to a pure C function that will release it), this can be done
with the managed_ctype<T>::release() function.
Closes #46 (closed)