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.
Make get_put_monitor_eqc pass during `make test`

Calling code:purge/1 and code:delete/1 were needed to make the test
pass. They effectively skirt using a sidejob worker to update folsom
stats, and do it directly instead. Since riak_kv is not running casts to
update folsom were being dropped on the floor that were needed by the
test. This only occurred in `make test` and not when running
get_put_monitor_eqc standalone because riak_kv was started and shutdown
before this test ran during `make test`.

Additionally, I added timeouts for the polling in case of a regression,
made the precondition more specific and ran this test in a slave node.
While these changes aren't strictly necessary they provide for cleaner
code and a better example for future tests.

I also removed some dead code.
use setup instead of node fixture for get_put_monitor_eqc
Allow utf-8 bucket types
Drop io:setopts in favor of the same change to nodetool
Error messages from `check_permission` can be utf-8, so use `unicode` module instead of `list_to_binary`.
Ignore cluster_info warnings.
Ignore result of list comprehensions.

Resolves:

riak_kv_stat.erl:63: Expression produces a value of type [any()], but this value is unmatched
riak_kv_stat.erl:65: Expression produces a value of type ['ok' | {'error',_,'metric_already_exists' | 'nonexistent_metric' | 'unsupported_metric_type'}], but this value is unmatched
Resolve folsom warnings.

Be explicit on match for success and crash if unsuccessful.

Resolves:

riak_kv_stat.erl:172: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:176: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:184: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:185: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:188: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:192: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:195: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:199: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:202: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:203: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:207: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:208: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:209: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:210: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:215: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:216: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:221: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:222: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:223: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:224: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:228: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:229: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:234: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:235: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:239: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:256: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:259: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:260: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:266: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:267: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:303: Expression produces a value of type ['ok' | {'error',_,'unsupported_metric_type'}], but this value is unmatched
riak_kv_stat.erl:318: Expression produces a value of type ['ok' | {'error',_,'unsupported_metric_type'}], but this value is unmatched
riak_kv_stat.erl:338: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
riak_kv_stat.erl:348: Expression produces a value of type 'ok' | {'error',_,'unsupported_metric_type'}, but this value is unmatched
Fail is metric can't be created.

Resolves:

riak_kv_stat.erl:309: Expression produces a value of type 'ok' | {'error',_,'metric_already_exists' | 'unsupported_metric_type'}, but this value is unmatched
Bump tools.mk.
Ignore additional dialyzer files.
Ensure stat can be registered.

Resolves:

riak_kv_stat.erl:489: Expression produces a value of type 'ok' | {'error',_,'metric_already_exists' | 'unsupported_metric_type'}, but this value is unmatched
Ignore tags file.
Ignore the result of the list comprehension.

Resolves:

riak_kv_stat.erl:325: Expression produces a value of type [any()], but this value is unmatched
Normalize return value of function.

Resolves:

riak_kv_stat.erl:577: Expression produces a value of type 'ok' | ['ok' | {'error',_,'metric_already_exists' | 'nonexistent_metric' | 'unsupported_metric_type'}], but this value is unmatched
Assert we can create the metric.

Resolves:

riak_kv_stat.erl:324: Expression produces a value of type 'ok' | {'error',_,'metric_already_exists' | 'unsupported_metric_type'}, but this value is unmatched
Ignore the result of the list comprehension.

Resolves:

riak_kv_stat.erl:310: Expression produces a value of type [any()], but this value is unmatched
Remove incorrect type specification.
Normalize the return value from the loop.