[WIP, RFC] torrent file parser

This is a work in progress, I'm creating this pull request to get some reviews/comments.

Things to do:

- [x] Implement `toBEncode` methods.
- [x] Expose lenses.
- [x] Implement `Arbitrary` instances.
- [x] Add tests. (some example files files https://github.com/Fuuzetsu/torrentinfo/tree/master/test/files)

How should I add tests? Should I add some example torrent files and try to parse them? As for properties, all I can think is `fromBEncode . toBEncode $ d = Right d`. Any other ideas?
There's some overlap between `SingleMode` and `MultiMode`. How about a different approach:

```haskell
data Mode i = Mode { _modeName :: B.ByteString
                   , _modePieceLength :: Int
                   , _modePieces :: [B.ByteString] -- Instead of treating this as a single string, split it on 20-byte boundaries? Consider using the `TwentyBytes` type defined elsewhere?
                   , _modePrivate :: Maybe Bool
                   , _modeInfo :: i
                   }

data SingleFileInfo = { _sfiName :: B.ByteString
                      , _sfiLength :: Int
                      , _sfiMD5Sum :: Maybe B.ByteString
                      }

type SingleFileMode = Mode SingleFileInfo
--- Similar for MultiFileInfo / MultiFileMode
```