Extra context: API + CLI

Fixes #12
Synthesizes parts of: #75, #100, #116, #161 and #199.
Thanks @fcurella, @aventurella, @emonty, @schacki, @ryanolson!
Is this a deliberate removal? I removed this when I switched from ```unicode_open``` to ```io.open``` but @dannyr asked me to put it back (to make sure that we read Unicode files correctly, however we did it).