Refactor transaction class


* Refactor transaction into a different subfolder
* Added a lot of tests for sighash and transaction serialization (from
  reddit's and Ryan X. Charles' `fullnode`)
* Drop "only" from sighash tests and consolidate logs
Hmm, can we have them be the same? I suspect this will cause confusion. Let's have `hash` and `id` be the same and expose a "hidden" method starting with `_` for internal usage... that way, an user that doesn't know this difference or the motivation behind it will never have an unexpected result (as he may have heard "the id of a block is the hash of its header")