Add a background lock and task manager module to riak core.
* The goal is to allow riak sub-systems to coordinate use of shared resources,
* e.g. protect from concurrent vnode folds on the same partition.
* Locks and tokens have a settable maximum concurrency limit.
* "Taken" locks and tokens are tracked in an ETS table.
* max_concurrency is returned when the set limits are reached.
* Processes that take locks are monitored.
* Locks are released when the taking processes terminate.
* Tokens are refreshed at a specified periodic rate.
* Token processes are not monitored because tokens never "release".
* A table manager is introduced to add persistence across process crashes,
* and to allow proper table transfer to occur without losing the table.
* An EQC test exercises the majority of the API. see test/bg_manager_eqc.erl
* See the original PR for background manager here: https://github.com/basho/riak_core/pull/364
Concurrency API should return 'undefined' for limits when the ETS table is unavailable * Allows callers to try again later
Remove history API, use unregistered to signal unavailability of bg-mgr, fix set_token_rate bug.
Integrate vnode lock with background manager
* Use per-vnode locks to guard concurrent kv folds on the same partition.
* Include kv module name to lock to differentiate from pipe/other vnode types.
Use unregistered as a means to detect bg-mgr unavailability