build: amalgamated build support with AMALG=1
amalgamated build concatenates all files into a single .c file to allow compiler see all symbols and produce possibly smaller code. for binary distributions this is what you want, as it's faster but may consume more memory during compilation. it however cannot do incremental builds.
Showing with 80 additions and 46 deletions