Test demonstrating that objects can not be written if a bad CRC is encountered in Bitcask
add stats for coverage query starts
 - index fsm: create, create_error, active
 - keys and bucket fsms (as 'list'): create, create_error, active
Merge branch 'master' into bitcask-badcrc-eunit-test

Preparing to bring the bad crc unit test into the present
change spawn to spawn_link
Write even on bitcask bad_crc read

Fixes issue #385
Reads on corrupted files return a bad_crc error, which were not handled.
When writing, if a bad_crc was encountered on read of an existing key,
the write failed. Files being erased, or even truncated were handled
and the write proceeds, but bit corruption would die. I don't think
there is any benefit to the different handling.
Whitespace change to trigger Travis
amend copy-pasto
Merge pull request #467 from basho/pevm-coverage-stats

add stats for coverage query starts
Adding bad_crc specifically on read before write

Although plenty of other situations may arise where an error upon
reading should simply allow the write to happen, we're going to wait to
standardize backend responses properly before trying to fix those.
This is just to be prudent until the consequences of doing that are
better understood. This makes the fix specific to bitcask bad CRC
errors and nothing more.
Standardization will hopefully happen in issue #496
Add partition to bad bitcask CRC err msg

Also, changed comment on bad CRC unit test to show it is verifying the
fix. The old language was written by the person first showing the
problem existed (Dan R.).
Merge pull request #385 from basho/eas-handle-bitcask-bad-crc

Objects cannot be updated if a bad CRC is encountered by Bitcask
new riak_object binary format

goal is to be versionable and smaller on disk than using term_to_binary.
removes duplication of bucket/key in encoded value and bloat from metadata
dictionary primarly.
new object format all the things

* register {riak_kv, object_format} capability
* writes should only be serialized to v1 format when it is
  supported accross the cluster
* before sending data between nodes (handoff) the binary format
  should be changed to the current version supported accross the
  cluster. This is to ensure an older node does not receive data
  in the new format after being downgraded
* update aae to support new format and use riak_object:hash/1
  which always uses the v0 (term_to_binary) format to calculate the
  hash
* kv_backup restore calls binary_to_term on the binary encoded object.
  Since the bucket and key are not available at this time, when backing
  up the data the binary encoding is changed to term_to_binary (v0).
* use riak_object:to_binary/1 in yessir backend
support for reformating objects on disk on a running node

* Reformatting is primarily intended for downgrading a cluster
that does not support a binary version used by a newer riak
* riak_kv_reformat:run/2 folds over each partition reformatting
each object it encounters whose binary version does not match
the desired one (the first argument to run). riak_kv_vnode:reformat_object/2
does the actual reformatting by simply fetching the object and rewriting it if
it exists. This assumes that capabilities have been set to the desired
version before the call to reformat_object/2. run/2 does this and either kills
or waits for handoffs to terminate on the node (based on the second argument
to run) before proceeding. This is necessary for the node to safely continue operation.
The function folds over all partitions at once, which may not be ideal
for large datasets or highly active clusters. Based on testing it may be
prudent to introduce some concurrency control. Additionally, due to the use of pmap,
crashing folds will simple cause the calling process to hang
* This commit does not include a method for how the function will be run against
a node
* added riak_object:binary_version/1
move size calculation into riak_object and account for v1 metadata
general cleanup of riak_object module

* move sorting of vnode entries into hash/1
* replace edoc specs with module attribute specs
* move some things around
* fix some issues caught by dialyzer
Merge pull request #479 from basho/jrw-pdx-binrobj-rebased2

More Compact Riak Object Binary Format
Merge branch 'master' into pevm-doc-env