Add initial draft for LCOV generation support.

This is really messy. If I had one thing to say about the code in this
repo, it'd be that it's really not my style. I'm getting caught up on
OOP patterns and so on; things I wouldn't normally enjoy.
Update the documentation.