Percent encode

The old encoding was wrong because unicode characters cannot be encoded by two hex-digits. Latin1 characters have been encoded differently. The standard is to go via a UTF8 encoded byte string.

(In query strings of the hets-api "+" may still be used instead of a blank, i.e. "?theorems=ax1+ax2".
A "+" in a theorem name should be written "XP", "X" as "XX" and " " (blank) as "XB".)

@sternk please review 
Blanks are no longer encoded as `+`. (It is an older convention for query strings.)
Actually `+` was and will be encoded. 

Also `~` is no longer encoded (as it is unreserved).