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.
Delete unused code
Remove repos.py

Since ae0d5c0c SVN backend no longer exists, so we don't
need Repos abstraction anymore
config.py: switch to ConfigParser

Instead of hackish regex-based config file parsing,
use standard Python ConfigParser module