PUT may now choose whether to store or update

This change introduces a PutAction, which determines what a PUT request
should attempt to do.  It picks a reasonable default depending on what
functionality is available: if both store and update are implemented, by
default it will try to update, and then store.  These changes disable
PATCH when there the diff type is the same as the resource, as that
implies that only complete changes can be made (by PUT).  The exists is
no longer required, and has been removed.
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.
Failed updates respond with resource not found
Tidying serve definitions