Complete description of Python web server in terms of extensibility.

Rewrote much of the code and the second half of the chapter in order to focus on extensibility.
case_always_fail deals with unhandled requests, but my sense of doom itches when I see code whose ultimate overall behavior/safety isn't discernible from immediate context - does that make sense? IOW, without looking through the handlers and discovering the case_always_fail context, it's undefined whether this code could fall through without having handled the request. Maybe this is a good place for a lesson in defensive programming, since this request handling pattern is common, and the request handlers are often defined by the user, or in plugins, etc.?