Developer adds expectations and promises to an action
(1) Can access these expectations in the executed block
(2) Adds class getter `expects_keys`
(3) Adds class getter `promises_keys`
Refactoring the `expects` macro, using set operation

First: thanks to @ramontayag for the PR. I refactored the code he sent:
got rid of the iterator and moved the `expects` and `promises` macro
specs into its own spec file.
Creating custom errors, making sure promised keys are in context
Removing code duplication

By using the "Use Surround Method" refactoring pattern.
Properly formatting missing keys
Extracting ContextKeyVerifier into its own class
Adding the `_spec` suffix to the spec file name

This way the test is being run with the test suite.
These methods should not be exposed
Using `expects` and `promises` in all the examples
Extracting method to better describe what it does
Changing the ContextKeyVerifier methods to class methods
Don't be afraid of type checking
Promises now have accessors and they are set in the context

Promises now have accessors. You don't have to set them explicitly in
the context, the `executed` macro will do that for you.
Adjusting the example to `promises`
Setting value through promises setter
Map does not make sense here
Define not one, but many expectation readers
No need to say `it` in the spec description
Updating README.md with `promises` changes
No need to expose the expected and promised keys