Fix flonum comparison.

8cc returned 1 for 1.0 < 0.0 because we used setl instead of setb.
Rewrite hash table as an open addressing hash table.

8cc's hash table used the chaining scheme to resolve hash collisons.
Nothing wrong with the chaining scheme, but I feel like the open addressing
is better algorithm for 8cc for various reasons.

1. First and foremost, it's a bit easier to implement and easier to read
because of less pointer juggling.

2. Utilization of the open addressing table would decrease if keys are
removed frequently because tombstones are set to removed slots.
In 8cc, keys are rarely removed (we currently do only for #undef).

3. It should be faster than the chaining scheme, although it's marginal
for our purpose.