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:

- [ ] How context-local objects in Flask are implemented

Will squash commits later.
The use case is described in the docs: internal redirects. In a view you can "fake" a request and call the application again and return that response possibly modifying it in the process. This works both within a single application and from one WSGI application to another.

It also has the benefit of making it impossible to mess up the internal state by using the public API alone.