Empty resource now defaults to Void types

The resource builder can now take advantage of the Void instances for
the different type classes defined in the package.  The Setters in the
Builder module have been replaced with setter functions that ensure that
type-modifying changes can only replace Void.  If functionality isn't
set, when the resource is built the undefined types will be forced to
Void.