Step one in reduced replications: a hook to mutate.

To achieve reduced replications, a mutation of the object on put and get
needs to be applied, and needs to be loosely coupled to the systems that
will be doing the mutating (repl). This module provides a place to
register and run mutators on puts and gets.
Refactored to use the new metadata system.

Rather than try to manage the list itself, it leans heavily on the
metadata system to manage diferences and storage of the data.
Added test for when no mutators ever registered.
Made get mutation dependant on a put mutation.

This means making mutators is safer as they are expected to be
symetrical. A get mutator is only called if the object in question was
put through the corresponding put mutator.
Gets mutators no longer get bucket properties.

The get in kv_vnode does not have the bucket properties available,
so to avoid additional slow-down, the get's no longer require bucket
properties.
Hooked meta data into get/put path and tests.

Reliable tests remain reliable.
Fixed mutator mutation order.

Assuming the mutator module is correct*, mutations on get are applied in
the reverse order from put.

A mutator module is "correct" if the get is the reverse function of a put.
All the data a mutator needs to reverse a given mutation must be put into
the object to be able to do this.
added priorities to mutators.

Currently defualt is 0. There's no restriction on what a priority can
be since all erlang terms can be compared in < and >.
Fixed typo
Refactored / changed mutator to be more resilient.

Callback modules can now be set to only worry about a given meta/value
pair at a time, but also gets full object. Put can expose some meta data
to the putting client that will be different from the stored data.
Fixed vnode call to mutator system.
refactored get mutation again.

It become needed for a mutator to know which specific meta/value pair it
was working on. Rather than extend the function, I've opted to just
give the callback the object directly.
Get mutators can now (legitimately) return notfound
Allowed mutators to use notfound as a response on get.
Much documentation for mutation.
Fixed resolver for mutators.
Removed eunit test hrl inclusion

Hold over from when the eunit tests were at the bottom of the module.
As they are not, this should have been removed.
Added comment about conflict resultion on mutators
Fixed typo.
Added comments and documentation

More than what, but some why too!