Strongly simplified the implementation.

Strongly simplified the implementation by making better use of
reflection. Currently implementation uses almost no unsafe operations.

Functionality has changed:
 - Unexported fields are no longer supported.
 - Flagging an interface is no longer supported. (This was a dubious
   case anyways.)
More detailed error messages.