Use request cache for overriding branch settings.

@cpennington Please review.
Theoretically, a thread-local would be sufficient for the `branch_setting` contextmanager.  However, rather than creating a new thread-local variable, I have the modulestores make use of the `request_cache` thread-local that has already been created and passed down.

Updating the Split Modulestore to use the new branch_setting implementation will be a separate PR.
if `self.request_cache.data.get(self.BRANCH_SETTING_FUNC_KEY, None)` returns `None`, then you will get an entry into `self.request_cache.data` of `None: lambda: branch_setting` - is that what you intend here?