Cleaned up 'torrents' app

  Please stick to the styleguides, discussed in #10
Renamed 'Torrent.private' to 'Torrent.is_private'

  Please, indicate that a field is logical by prefixing it with 'is_'
Explicitly limited the length of MD5 hash in 'Torrent.md5_sum'
Cleaned up 'Torrent.to_bencoded_string'
Dropped '@models.permalink' from 'Torrent.get_absolute_url'
Fixed failing 'torrents' tests
Split 'drop_empty' into 'recursive_drop_falsy' and 'recursive_force_bytes'
Fixed 'torrents_inheritance_tests'
Made 'pep8' happier
Added missing migration for 'Torrent.md5sum' length constraint
'Torrent.announce' should be a 'URLField'
Merge pull request #24 from superbobry/feature/rejection-validation

Random 'torrents' improvements
Switch to using a GenericForeignKey.

This is so we can insert things in places they shouldn't go.
Add an 'Inbetweener' example of inserting an inbetween model
Rename 'has_child' to 'get_by_child'
Add errors for failing to have correct relationships with your children
Some cleanup

Rename "child" to "superclass" and "parent" to
"subclass" to clarify differences between Inheriting and Descending
classes.
Add a direct relationship from Upload to UploadGroup which automatically updates
Merge pull request #25 from wafflesfm/feature/torrent-model-rethink

Switch to using a GenericForeignKey
to_bencoded_string -> as_bencoded_string.

Django convention is to name functions `as_X` when we're just altering the
view and not the underlying model.