This PR is a prototype implementation of plugable consensus engines and the Clique PoA protocol ethereum/EIPs#225
This commit adds pluggable consensus engines to go-ethereum. In short, it introduces a generic consensus interface, and refactors the entire codebase to use this interface.