Improve repo detection

This switches to using a dependency to parse the URIs. I'm not crazy about adding dependencies, but in this case I think it adds a lot and extracts out some complexity that we shouldn't really handle. Like I explained in a commit message, the URI library included in Ruby doesn't handle SSH URIs (`git@github.com:owner/repo.git`), but Addressable handles these.

I also added a basic sanity check on the slug to be more sure that it is valid and output a more helpful message if it isn't (this is mostly catching using `-r repo` instead of `-r owner/repo` more than anything else).