Merge #311
311: Split protocol/ledger related concerns. r=nc6 a=nc6
This is not ready for merging, since it needs references added, but should serve
to start guiding the implementation at the Haskell level.
Co-authored-by: Nicholas Clarke [email protected]