Improve type discipline and target C18
I've gone through the codebase and done some cleanup work:
- made typecasts, especially to and from signed integers, explicit
- change GNU-specific language extensions into their annotated forms
- a few name changes to avoid ambiguity (for example, avoiding 'new' and 'delete' since c++ uses those as reserved words)
- changing the compilation target from
gnu11
toc18
(saves about 5KB off the stripped binary size)
None of this should change existing behavior, but should hopefully help maintainability.