~ Use lazy bytestring

This lead to the following consequences:

  * we could efficiently read from storage - if block intersects files
    boundaries then we will "view" the block in the two different
    bytestrings. To avoid concat we now return lazy bytestring;

  * we could read block from socket without "concat" - again, for the
    same reason.

The pitfail is that now we have a bit more heap object, but blocks
lifetime is very short and this shouldnt play the big difference. The
lifetime is either (socket -> storage -> unreachable) or (storage ->
socket -> unreachable) unless a lib user keep block for their own
purposes.
~ Move MMap tests to properties test suite.

The MMap test suite is tiny enough to not separate it from the main test
suite.  It also reduces compilation (link) time a bit.
~ Move info hash test to main test suite.
~ Minor changes.
+ Add JSON instance for ScrapeInfo.
+ Add tests for ScrapeInfo encoding.
~ Use Data.Text for text fields.
~ Use TH for JSON instance.

Note that we don't need JSON tests anymore.
+ Add Torrent Hashable instance.
~ Make JSON instance for Torrent.

Note that we have reorder some code to follow GHC Stage Restrictions.
~ Rename PeerID to PeerId.
~ Add more JSON instances.