Add fabric_dict:is_key/2

BugzId: 21755
Add fabric_dict:fetch_keys/1
Implement fabric_util:stream_start/2

This is a utility function that handles gathering the start of a rexi
stream. It will return a single full hash ring of shards or an error.

BugzId: 21755
Implement fabric_view:check_down_shards/2

This replaces fabric_view:remove_down_shards/2 with a check to see if a
rexi_DOWN message affects any of the worker shards. This is because we
monitor all the shards but are only handling messages from a single ring
which may not have included a node in the initial shards list.

We no longer need to remove shards on down nodes because once our stream
handling functions run as soon as we see a shard on a downed node we
know that progress is no longer possible under our current behavior.
Implement fabric_view:handle_worker_exit/3

This is a simple utility function that we can use to cancel a streaming
response when a worker dies. By the time we get here we know that
progress is no longer possible so we report the error and abort the
stream.
Update _all_docs coordinator to use new RPC APIs

BugzId: 21755
Update map view coordinator to use new RPC APIs

BugzId: 21755
Update reduce view coordinator to use new RPC APIs

BugzId: 21755
Remove test for old reduce view behavior

This test is no longer valid because its checking that a complete
message removes other workers from the same range which no longer
happens. This is because fabric_util:stream_start/2 now removes all
workers and returns us a single complete shard ring.

BugzId: 21755
Update _changes coordinator to use new RPC APIs

BugzId: 21755
Set io_priority properly for all requests

Notably, changes wasn't calling set_io_priority so was not affected by
maintenance_mode.
Fix `fabric:get_db_info/1`

We weren't properly removing shards that had an error as well as
returning errors to functions that don't expect them.
Allow shard replacements in stream_start

This adds fabric_util:stream_start/4 which accepts a start function and
a proplist of replacement shards keyed by range. If a worker exits due
to maintenance mode and prevents progress from being made, the list of
replacement shards is searched for any replacements for the range. If
any are found the start function is called for each possible
replacement. The start function takes the possible replacement and
should return the new worker.

BugzId: 20423
Add utility function to find shard replacements

Streaming RPC coordinators can use this function to generate a list of
shard replacements that is suitable to be passed to
fabric_util:stream_start/4.

BugzId: 20423
Provide replacement shards in map views

BugzId: 20423
Provide replacement shards in reduce views

BugzId: 20423
Provide replacement shards in changes feeds

BugzId: 20423
Merge pull request #122 from cloudant/20423-non-interactive-stale-and-changes

Use new rexi streaming APIs and finish non-interactive mode