Add url type option and improve robustness

This contains two commits. The first adds a custom option to decide which url type to use ("git://", "https://", or ssh) instead of just using the ssh url. The second makes it give a better error message if the `git clone` command fails.
The Custom system defines a widget that accepts any symbol, but (surprisingly) it doesn't define one that accepts only keywords. So I defined one. Basically this prevents you from inputting something like `not-a-keyword`, which is guaranteed not to be a valid slot since all the slots of the gh object are tagged with keywords. If it doesn't validate, the custom system will refuse to save it. But that's all it does: prevents you from shooting yourself in the foot through customizel outside customize there is no effect. I guess you could just as easily add the `:validate` property directly to the one widget used in the the defcustom declaration instead of defining a new widget type, but this makes it clearer what is going on.

Anyway, if you don't see a reason to allow other slots, this is all moot anyway. I generally try not to assume that I know all the possible values an option might take. For all I know Github will come out with a new protocol for cloning repos, and this code would support that. But realistically that probably isn't likely enough to cater to.