Make routes case-sensitive

This fixes at least two issues, both of which we added integration tests for:
1. With  a route defined using "/route/:param", when doing a request on
  "/route/MyValue", request.params("param") would return the lowercased "myvalue"
2. When defining two routes "/route/:param" and "/ROUTE/:param", it would invoke
  the first match even doing a request on "/ROUTE/foo"

RFC2616, Setion 3.2.3 (URI Comparison) says the following on the topic (note it
only comments on client behavior, but if a client treats two URIs as being
different, the server should adhere to this all the more):

   When comparing two URIs to decide if they match or not, a client
   SHOULD use a case-sensitive octet-by-octet comparison of the entire
   URIs, with these exceptions:

      - A port that is empty or not given is equivalent to the default
        port for that URI-reference;

        - Comparisons of host names MUST be case-insensitive;

        - Comparisons of scheme names MUST be case-insensitive;

        - An empty abs_path is equivalent to an abs_path of "/".