Refactor FakeLinkDatabase to encapsulate changeable behavior and introduce LinkDatabaseSwitcher

The idea is to be able to use it like this:

using (new LinkDatabaseSwitcher(behavior)) {
  // ...
}

I pulled the behavior back into the FakeLinkDatabase and repurposed the SwitchingLinkDatabase to be the new LinkDatabaseSwitcher. Added required tests, an example, and a README section. And I also added Globals.Load() into initFakeDb pipeline. Link and Task databases are not singleInstance and will be created every time (there's a test to verify).