Optimize matching by caching consume regexp for strings, regexp, symbol, and :extension matchers

This significantly speeds up matching by caching the underlying
consume regexps.  Previously, consume always built the underlying
regexp every call, which is expensive.  This changes consume so
that it takes the regexp to use, so it can be passed directly.

This caches the patterns in the request class, and uses the
caching for strings, regexp, symbols and the :extension matcher.

Note that this is a backwards compatibility break for consume,
so any users calling it directly need to update their code to
use the caching.

I don't expect that users are dynamically constructing match
patterns, but if they are, this is a potential memory leak. If
any users report doing that, I'll add a plugin that disables
the caching.