Extra context: API + CLI

Fixes #12
Synthesizes parts of: #75, #100, #116, #161 and #199.
Thanks @fcurella, @aventurella, @emonty, @schacki, @ryanolson!
In reviewing this, I don't see how removing this function relates to the rest of this ticket. By moving this to it's own pull request #260 becomes more atomic and we can more readily analyze what's going on.