Provide Proper Creation Semantics for Bucket Types

Some properties need to be "create-only". To supoprt this we
need to ensure that nodes only see no type or a single type. This commit
implements this invariant. See riak_core_bucket_type module documentation
for more details.

In addition to changing how bucket types are created and modified this
commit changes the interface to riak_core bucket validators. The
validate function is now passed three additional arguments: an atom
indicating if the properties are being created or updated (create is
only for bucket types), the bucket type and bucket (or undefined bucket if
just updating the type), and the previous properties being
modified. This allows validators to provide more details validations
such as preventing which properties can be set only at creation time.
use max function when resolving bucket properties