repos.py: introduce repo lock

Introduce a per-repository lock. Thread-unsafe commands now use @need_repo_lock decorator.
For now, thread-safe commands are `reparent` and `auth`.

However, since SQLite isn't thread-safe, auth.py holds lock when accesses db.
commit.py: eliminate static dirs/files cache

In order to support multithreading, connection-specific info must not be stored in shared objects.
Thus, move Dir.dirs cache into Commit command.

Files.files cache isn't read by anyone and is simply deleted.
Do not instantiate Repos for each request

Now Repos objects are instantiated once on server start and are reused for all connections.
This lead to several consequences:
  * Repos no longer work with absolute URLs and are instead given path relative to their root.
  * Repository UUID no longer depends on hostname
  * base_url is now connection-specific

Also, `reparent` now validates its argument and doesn't allow to go outside of repository.
Use threading instead of forking

By switching from fork to threads we open an
opportunity to build proper Git<->SVN mapping cache
and keep it in-memory.