Choose different base types for enums

We now choose int/unsigned based on the presence of negative entries.
This should fix gcc/20000914-1.c (although this wasn't strictly a
cparser bug).