Tests passing for a first rough version of a cached branch config store. The changes here are too invasive and several parallel proposals have been made.
@only_raises is evil and gave a hard time since any exception during save_changes() was swallowed.
Possible improvements:
- add some needs_write_lock decorators to crucial methods (_set_config_location ?) but keep locking the branch at higher levels
- decorate branch.unlock to call stack.save if last_lock() it True outside of @only_raises scope (evil decorator)
- add @needs_write_lock to stack.set and stack.remove (will probably get rid of most testing issues) we probably need a specialized decorator that can relay to the store and from there to the branch or whatever is needed. This will also helps bzr config to get it right. The get_mutable_section trick should not be needed anymore either.
- decorate branch.unlock to call stack.save if last_lock() it True outside of @only_raises scope (evil decorator)