~ Use bytestring stream in tracker communication.

stringBufferOp is defined in terms of strictBuffer op. So we previously
we have convertion from strict bytestring to string and then manually
pack string back to strict bytestring to with BC.pack. We could avoid
this unnecessary convertion by just using bytestring streams.

http://hackage.haskell.org/packages/archive/HTTP/4000.0.9/doc/html/Network-BufferType.html#v:stringBufferOp
~ Polish documentation for Tracker.Protocol.
~ Throw exception in askTracker.

HTTP client functions throws an exception. If we unable to decode result
we return BEncode.Result.Left. So user of this function should check
both kinds of errors and this complicate usage. Instead of this we throw
IOException too.