Switch from URI.parse to Addressable::URI.parse

This enables us to be consistent in our use of URI parsing library. Addressable::URI conforms to a more recent RFC, and handles things like underscores in hosts and paths. One thing I came across in migrating was the fact that the standard URI.parse protected us from XSS attacks, such as `<script>` tags in the path, but I've dealt with this by ignoring paths containing `<script>`. Underscores are also valid according to Addressable::URI, so change the tests using underscores for invalid data to use curly braces for invalid data. Revert the changes in 30b999a that had to change underscores to dashes for URI.parse to confirm the hostnames as valid.