add new canonifyuniquely function

This function is extremely useful when you need a unique canonical classname (e.g. as an array key or as a unique class per filename) but there may be a collision between the two keys, like `h?llo` and `h!llo` which both canonify to `h_llo`.

Has acceptance test.  Uses SHA-1.  I will write docs if it's accepted.  Basically the equivalent of `concat(canonify(string), "_", sha1(string))` but much more convenient.

This was discussed with @zzamboni last year but I kept forgetting to write it up...