Escape !, ', (, ), and * characters when generating URLs.

If you attempt to open a URL that has these characters unescaped in a
browser, it may re-encode the URL to escape them. This breaks the
checksum.

To avoid the issue, just force these characters to always be escaped.

Fixes #2