Introduce the strongly typed enum BlockValidity to represent the validity of a block
Summary: Use it as parameter to IsValid and RaiseValidity. The type safety allows us to remove some asserts as they are now invariant of the type system.
Test Plan:
make check ./test/functional/test_runner.py --extended
Reviewers: #bitcoin_abc, schancel
Reviewed By: #bitcoin_abc, schancel
Subscribers: schancel, teamcity
Differential Revision: https://reviews.bitcoinabc.org/D1445