Tracker changes for upgrading peers.
Shows an AnnounceURL which a user can embed in their torrent.

This prevents them from having to move the files / recheck the torrent. They can create a torrent
with their announce-key that is seedable.

Babou strips the announce url so this is safe from a security standpoint.
Merge branch 'master' into develop/tracker-upload
Protect list of peers with RWLock() mutest.
(Contention for this list is likely as we accept concurrent announce
requests. I'm also about to add background jobs which will write the map.)
Merge branch 'master' into develop/tracker-upload
Merge branch 'master' into develop/tracker-upload
Merge branch 'develop/tracker-upload'

Adds [very early] support for uploading .torrent files to the tracker.
The resulting .torrent files are stored in the database and .torrent files are
created on the fly by bencoding this data and setting the announce URL to the user's
private announce URL.

The user's private announce URL is shown on the upload page presently. This
should be embedded in their personal 'trackers list' so they can start seeding as soon
as the torrent is available to the tracker.

We have tested this with several torrents ranging from ~600MiB ISO files to ~2.08GiB multi-directory
torrents filled with multimedia [images, videos, test] with block sizes ranging from 256KiB to 4MiB.

So far this seems to be holding up OK. The only database access made by the tracker is to authenticate
the user and to lookup the torrent if it is not cached.

We are not caching user objects as they can be updated by the site -- this will be remedied when the site
and tracker have a secure communications pipe.