Util: improve bsToHex performance

The old routine is very slow for larger inputs, something O(n^2):

> length $ bsToHex $ BS.pack $ take 3000 (repeat 0x62)
6000
(1.01 secs, 662956664 bytes)

> length $ bsToHex $ BS.pack $ take 6000 (repeat 0x62)
12000
(4.89 secs, 2993737936 bytes)

The new method is considerably faster:

> length $ bsToHex $ BS.pack $ take 6000000 (repeat 0x62)
12000000
(0.72 secs, 653576448 bytes)
Merge pull request #74 from OttoAllmendinger/fix-bsToHex

Util: improve bsToHex performance
Script: OP_PUSHDATA can have zero-length payload

There were some byte sequences that could be decoded into Script, but could not
be encoded back into byte sequences again.

Also fixed `opPushData BS.empty`

Add tests asserting `(encode (decode bytes)) == bytes` for canonic tests cases

Should now behave identically to the reference implementation:
https://github.com/bitcoin/bitcoin/blob/0.9.2/src/script.h#L372
Merge pull request #75 from OttoAllmendinger/fix-TestEncodeDecode

Script: OP_PUSHDATA can have zero-length payload