[#9] Makes the key type abstract.

Also ensures that # cannot be part of a key.