Refactor package graceful

This is meant to accomplish a few things:
1. graceful no longer spawns an additional goroutine per connection.
   Instead, it maintains a sharded set of idle connections that a single
   reaper goroutine can go through when necessary.
2. graceful's connection struct has a more orthogonal set of connection
   state flags, replacing the harder-to-understand state machine. The
   underlying mechanics are largely the same, however.
3. graceful now uses the Go 1.3 ConnState API to avoid the "200-year
   SetReadDeadline hack." It still falls back on SetReadDeadline on Go
   1.2 or where ConnState does not apply.
Add bind.Sniff to expose default selection logic

This allows users who do not wish to use bind.WithFlag() to still take
advantage of bind's magical listener selection logic.

Fixes #68.
Don't expose the internal routeMachine
Start moving away from struct embedding

Instead of using struct embedding to build web.Mux, start moving towards
explicit mappings. This doesn't actually change the public API of
web.Mux, but feels a little cleaner to me.

The longer-term thing here is to get rid of the functions defined on
Muxes in the public documentation that are defined on "rt *Mux", which
is just plain ugly.
Put more methods on Mux

This fixes the documentation wart where half of the methods were defined
on "rt *Mux". It doesn't change the public API.
Fix public API

f2926972236e62bb85a77c9ed50514d23fd5b294 accidentally removed
web.Mux.Compile from the public API. This restores it.
Move Pattern code around

I think this is a bunch clearer.
Pre-compile routes at Serve() time

I originally exposed Compile() for exactly this use case, but apparently
I never actually implemented this. Oops.

In any event, this makes the first request a little faster (an extremely
unscientific test suggests on the order of 10 microseconds). Also, if
something goes terribly wrong during route compilation, it would fail
before we start listening on the socket.
Minor fixup
Move bytecode router code around
Change the router interface slightly

Make the bytecode runner return the route that we're going to use. It's
up to the router itself to dispatch to that route.

Besides feeling a teensy bit cleaner, this refactoring is to prepare for
a "Router" middleware, which will allow application developers to
control when in the middleware stack routing occurs.
Add a note about outgrowing Logger

This is a common enough question that it's worth calling out explicitly.
Allow ".,;" as string pattern "break chars"

This allows you to match "/a/cat.gif" with patterns like "/a/:b.:c".

Thanks to @Minecrell for an early patch implementing this functionality.

Fixes #75.
Fixes #48.
Change semantics of wildcard patterns

This is a breaking API change that changes how wildcard patterns are
treated. In particular, wildcards are no longer allowed to appear at
arbitrary places in the URL, and are only allowed to appear immediately
after a path separator. This change effectively changes the wildcard
sigil from "*" to "/*".

Users who use wildcard routes like "/hello*" will have to switch to
regular expression based routes to preserve the old semantics.

The motivation for this change is that it allows the router to publish a
special "tail" key which represents the unmatched portion of the URL.
This is placed into URLParams under the key "*", and includes a leading
"/" to make it easier to write sub-routers.
SubRouter middleware

This middleware makes it much easier to write sub-routes, allowing you
to make the sub-router ignorant of its parent router's matched prefix.

The example app has also been modified to use this functionality for its
admin pages.

Fixes #65.
Force use of fallback chanpool on App Engine

This is to work around a bug where App Engine, which as of this writing
runs Go 1.2, builds code which uses the "go1.3" build tag. See #67.

This bug is being tracked at:
https://code.google.com/p/googleappengine/issues/detail?id=11346
Fix typo in a test error message
Improve test coverage slightly
Simplify a logical XOR
Fix bug with string pattern matching with "."

Previously, a route like "/:a.png" would match "/foo/bar/baz.png".
This was incorrect, as all matches should be restricted to path segments
(or smaller, as dictated by a break character).

This bug was introduced in 1a390aba1c7c591e2c0c75be43eb830091b7d6f7.

Fixes #75.