Make some functions public, be more moronic about certain stuff

The print() function, its affiliated macros, plus a few other handy
macros should be available to all modules, so it's moved into the
header. Also, all macros are now in caps, to ensure that the caller know
about their macro nature (not that somebody tries something like
`max(a++, b++)` and breaks things horribly.

Add a few warning options for gcc, and clearly `(void)` out function
return values if not used (e.g. fprintf).