Introduce BlockHash to represent a block hash
So far we've been using raw uint256 for block hashes. Many things in bitcoin are uint256, such as transaction ids, merkle root, sighash, and so on.
Using a dedicated type ensures greater type safety and allows to make API more specific.
make check ./test/functional/test_runner.py
Reviewers: #bitcoin_abc, Fabien
Reviewed By: #bitcoin_abc, Fabien
Differential Revision: https://reviews.bitcoinabc.org/D4595