Add breadth-first AAE exchange

This commit ports the breath-first exchange algorithm from the synctree code in riak_ensemble to the hashtree code here in riak_core. This level-by-level exchange is necessary to support streaming and/or pipelined AAE exchange -- an approach that underpins the new AAE-based fullsync replication protocol in Riak Enterprise.

Sibling pull-requests: basho/riak_kv#1023, basho/riak_repl#616
Good observation.  `riak_ensemble_util:orddict_delta/2` returns `[ {'$none', any()} | {any(), '$none'} | {any(), any()} ]`.  Thus, if the local cluster has some missing sub-buckets or segments as compared to the remote cluster; the result of this function (line below) would include some '$none's.  How does the next level in the recursion handle that?