At least for the "global flag", `skip_background_manager` we should move that into `get_lock`. In psuedo-erlang:

```erlang
%% in bg manager change get lock to
get_lock(Lock, Pid, Meta) ->
   case app_helper:get_env(riak_core, skip_background_manager, false) of
        false -> %% rest of code
        true -> max_concurrency
   end.

```
From there its not too hard to take that a step further and make a `get_lock/4` like:

```erlang
get_lock(Lock, Pid, Meta, SubsysSkip) ->
    GlobalSkip = app_helper:get_env(riak_core, skip_background_manager),
    DoSkip = (SubsysSkip =:= true) orelse (GlobalSkip =:= true)
    case DoSkip of
        false -> %% proceed
        true -> max_concurrency
    end.
```

This would get rid of the need for `maybe_get_vnode_locks` at each callsite and replace it w/ e.g.:

```erlang
riak_core_bg_manager:get_lock({riak_kv_vnode, SrcPartition}, self(), 
              [{task, aae_rebuild}], app_helper:get_env(riak_kv, aae_skip_background_manager))
```

Abstracting over the flag using the function argument is a bit wierd since passing true basically means "call this function but don't" but I think its better than duplicating this code in several subsystems.

In addition, `aae_skip_background_manager` should be a `riak_kv` application variable not a `riak_core` one. 

I'd also love to see them re-worded in the positive e.g. `use_background_manager` and `aae_use_background_manager` (which would change my implementations above a bit as well obviously).