Rewrite docs for context locals, request contexts, and app contexts

Closes #1151.

The following is an incomplete draft. However, I wanted to request comments immediately, in case anything was severely wrong.

The doc should be updated to include:

- [x] How context-local objects in Flask are implemented

Will squash commits later.
When writing this i thought of some other ways to solve the same problem. I could've raised a special subclass of TypeError from the storages, which contained information about which parameter was missing. The CLI could then prompt for the parameter and try again to instantiate the object. I think, however, that my current approach is much more flexible. Not sure though, feedback is always welcome.