Hash Trees for use in Cluster Metadata

hashtree_tree implements a data structure for efficiently determining
the differences between keys in two different stores. Unlike hashtree,
which this module is based on, keys can be logically grouped such that
differences found include missing groups as well as which groups the
differing or missing keys belong to.

This commit copies hashtree.erl from riak_kv (it will be removed in
that repo). In addition, it adds a (temporary) dependency on eleveldb,
which is used by hashtree.erl. hashtree_tree is intended to be used
ephermerally (although there is no reason it cannot be persistent) but
hashtree must first be extended to have pluggable backends.
Add Prefix Iterators to Metadata Manager

These iterators are necessary to build hashtrees and
repair divergent or missing full-prefixes
Cluster Metadata: Track Local Changes w/ hashtree_tree

Use hashtree_tree to store hashes for data in
riak_core_metadata_manager.  The tree is managed by
riak_core_metadata_hashtree. Hashes are inserted into the tree,
synchronously (for now) by metadata manager in the write path. In
addition, metadata_hashtree builds the tree with hashes for data
already stored on disk (ensuring not to trample new updates in the
process). Once the tree is built, it is periodically updated. Minus
the periodic update, the metadata_hashtree process is akin to
riak_kv_index_hashtree in Riak's AAE subsystem.

The API to access hashes is exposed via riak_core_metadata:prefix_hash/1.
Add Remote Iterators to Metadata Manager

Iterating from a node other than the one running the metadata manager
was not possible, previously -- ets continuations cannot cross
nodes. This is intedended for use in repair after hashtree exchanges.

In addition, iterator_close/1 has been added. This is necessary to cleanup
remote iterators. For local iterators it is a no-op.

This API is not exposed via riak_core_metadata since the iterface is
primarly meant to be local.
Cluster Metadata Exchanges

Use metadata hashtrees between nodes to determine differences or
missing keys and (full-)prefixes. Repair using metadata manager's
merge function (an additional version has been added to merge remotely).
The metadadata_exchange_fsm is the managing process.

NOTE: currently exchanges are not "plugged in" anywhere. They are not
started automatically. This commit simply implements the determination
of differences and the repair of those differences.
add metadata hashtree modules to .app