Let middleware wrap up options and other state

This allows the middleware to expose internal bits that can be use to
affect behavior or reset state.  Writing middleware in this way is
completely optional.  Current existing middleware will continue to work,
unchanged.
Added some missing docstrings
Add clear-config-cache
Update readme
And a ! to clear-cache-config

It's destructive, so marking it with a ! seems legit
Fix readme formatting
Merge pull request #14 from leathekd/wrap-config

Wrap config