Optimize riak_object:merge_contents

First, remove unnecessary dict -> list -> dict conversion. This conversion
was previously added to address a bug arising from equivalent dicts having
different structure (and thus not comparing equal as terms). Rather than
performing the conversion, this commit uses a custom comparison function
to achieve the same effect. The new comparison approach exits early in the
common case. Even in the uncommon case, the comparison function only does
a dict -> list conversion, avoiding the final list -> dict from before.

Second, change fold_contents/3 to not use an ordset for tracking kept
siblings (which has O(N^2) complexity), but instead construct a simple
list (with possible duplicates) that is then sorted/filtered at the end.

In micro-benchmarking, this commit improved non-DVV merging by 10x, and
DVV merging by 2x.
Merge remote-tracking branch 'origin/jdb-optimize-merge' into rdb/jdb-opt-merge

Conflicts:
	src/riak_object.erl
Comment up optimisations
Make `dvv_enabled` a bucket property

Set it's default to `false` on legacy/default buckets
Set it's default to `true` on typed buckets

Update all the tests and associated places this change touches
Merge pull request #891 from basho/rdb/dvv-bucket-prop

Make `dvv_enabled` a bucket property