Change the Repository.add_fallback_repository() contract slightly.
So the final statement for fallback repositories is: 1) When transitioning from unlocked => locked, we will lock the fallback repos 2) When transitioning from locked => unlocked, we will unlock the fallback repos 3) If self.is_locked(), add_fallback_repository() will lock the fallback repo, which will match (2) when self is finally unlocked. Callers of add_fallback_repository() maintain their responsibility to match every lock that they perform with a corresponding unlock.