Refactoring blocksources to make it easier to implement a new one

BlockSourceBase now provides the bulk of the implementation, reducing
the amount of work involved in creating a new block source to the specification
dramatically.
Fixing up tests to work and comply with the documentation about block count

TODO: I probably just want to change the function to explicitly work based on block count.