Fail informatively when redirect() is called with an opaque uri.

Absent this fix the call fails at runtime with “undefined method `empty?' for nil:NilClass” for uri.path.empty? because opaque uris have no path.

Also split the redirection tests out of routing_test.rb, which is pretty beefy.