Extra context: API + CLI

Fixes #12
Synthesizes parts of: #75, #100, #116, #161 and #199.
Thanks @fcurella, @aventurella, @emonty, @schacki, @ryanolson!
If an error is thrown if a user passes a key that is not associated with the project, why are we calling this `extra_context`? I thought the point of this feature was the ability to **add extra context**, not just provide an override. If the focus is on an override context, then let's call this `override_context`.

Personally, I prefer the idea of extra context that also serves as an override context. It allows for the easy injection of secret keys, timestamps, and other really nice capabilities.