Rename sharp -> hash.

C11 uses both sharp and hash to refer this symbol.
This is a matter of taste. I choose hash because that looks more common.
Define Set type to use for hideset.

We used to use a Map to represent a hideset. Using Map felt
a bit awkward because of the nature of the Map. We needed
to make a copy of a Map conservatively so that the other token
sharing the same hideset wouldn't clobber the Map contents.

Only a few percent of total tokens are usually become a
subject of macro expansion. Almost all tokens don't need
hidesets at all. Allocating a map to each token looked
a bit waste.

So I decided to defined a new type. The new type is very simple.
It may look too simple, but I believe it's good enough for us.