Fix incorrect assert_redirected_to failure message

In some instances, `assert_redirected_to` assertion was returning an
incorrect and misleading failure message when the assertion failed.
This was due to a disconnect in how the assertion computes the redirect
string for the failure message and how `redirect_to` computes the
string that is actually used for redirection.

I made the `_compute_redirect_to_loaction` method used by `redirect_to`
public and call that from the method `assert_redirect_to` uses to
calculate the URL.

This uncovered a new test failure due to the regex used by
`_computer_redirect_to_location` allowing `_` in the URL scheme. I
corrected the regex to be consistent with RFC 3986.