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.
Fix an issue with compound assignment operators.

If the left arith type of a compound assignment had less bits than an int,
an assertion in usual_arith_conv was triggered. This was because the left
type was not promoted correctly.
Update .gitignore to match new test binary names.
Pointer comparisons and difference match the C standard.

Fixed issue with pointer operations.
C11 6.5.6.9: Pointer subtractions have type ptrdiff_t.
C11 6.5.8.6, 6.5.9.3: Pointer comparisons have type int.
Add a note to README.
Fix #include in regard to #pragma once or #import.

GCC would never include a header file twice if the header file
was read using #import or the file had a #pragma once directive.
This patch is to make 8cc compatible with that.