Comments and bug fix

Added comments to all functions.

Fixed a problem with constructing a pointer union from anything but the
first pointer type by adding a templetized constructor to the inductive
case. Added a test case so that the unit test fails to compile if this
is violated.