Make r.multi_route prefer longer route if multiple routes have the same prefix

Previously, if you had named routes "foo" and "foo/bar", and you
got a request for "/foo/bar/baz" the route chosen would depend on
the order the entries were added to the hash (and would be
arbitrary on ruby 1.8).  This sorts the entries and reverses the
output, ensuring that longer entries come before shorter entries
in the regexp union, so that they are matched first.
Add namespace support to the multi_route plugin, to support more complex applications

Complex applications may need the flexibility r.multi_route offers
at multiple points in their routing tree.  For example, if you want
to store your named routes in a directory tree:

  /routes/foo.rb
  /routes/foo/baz.rb
  /routes/foo/quux.rb
  /routes/bar.rb
  /routes/bar/baz.rb
  /routes/bar/quux.rb

You can load all of the routing files in the routes subdirectory
tree, and structure your routing tree as follows:

  # app.rb
  route do |r|
    r.multi_route
  end

  # routes/foo.rb
  route('foo') do |r|
    check_foo_access!
    r.multi_route('foo')
  end

  # routes/bar.rb
  route('bar') do |r|
    check_bar_access!
    r.multi_route('bar')
  end

  # routes/foo/baz.rb
  route('baz', 'foo') do
    # ...
  end

While here, I noticed that r.multi_route ignored the named route
return value.  If you are passing a block, this is fine, as the
API is that the block is used instead.  However, if you are not
using the block, it should use the named route return value instead
of always using nil in that case.