Rewrite to incorporate type-preserving functions

Here is a full rewrite that exposes all of the functions from the existing release and more.  It goes from the 8 conversion functions to a set of 13, and implements 3 additional variations for each one based on the return type as discussed.  Thus, there are 52 public conversion functions, plus the AlterName and alter-name protocol functions in the namespace.

It is backwards compatible except for the exposure of the protocol functions (which weren't meant to be part of the API anyway).