Implement a basic mapper

This should now be ready to merge. For details, see inline docs and the brief integration test at: https://github.com/dpla/KriKri/pull/23/files#diff-c139162c30d9695d1f73d5b6881e4348R4 

I'll compile a longer commit message on squash.
I think my first guess was that we could change the check to `block.arity == 0`, but now wondering what the consequences of that would be.