Proposition to ensure consensus


[PR not ready to merge, only for review and discussion]


each block:
1) we concatenate all movements from credits and debits tables to get the `movement_string`
2) we use this `movement_string` and the  `movement_hash` of the previous block to calculate the `movement_hash` of the current block: `movements_hash = dhash(previous_hash + movements_string)`
3) each N blocks (the checkpoints defined in config.py) we check if the `movements_hash` is correct, if not we raise a ConsensusError.

Because each `movement_hash` is calculate with the previous  `movement_hash`, only one change in credits or debit tables changes all the next `movement_hash`.
We can add a checkpoint each protocol change. We can also remove old checkpoints if the checkpoints list become too big.

thoughts?

Is there not a more concise way of checking if a column exists?