Rewrite the Makefile

Introduces better interoperation with *NIX systems and categorize the
rules a bit better. The idea is to keep variables like CC
system-dependant but changeable from the command line. Also, it breaks
down build rules into compilation and linking, which improves the
parallelism available in building Carp. And a bunch more that I'll try
to enumerate next.

1. Leave $(CC) up to the system, the user can then either use gcc or
clang to their own will. Will default to the system's cc.

2. Introduce a RELEASE variable which can be set using `make
RELEASE=yes` which then enables -O2 and defines NDEBUG.

3. Add CFLAGS and LDFLAGS and set CFLAGS to more strict
parameters. See Makefile.

4. Split into MAIN_* LIB_* and TEST_* build targets.

5. Add .PHONY to phony targets.

6. Unify the cleaning target for now. DOWNSIDE: Cleaning is not so
modular anymore. There's currently only two cleaning targets: clean
and libtap_clean. I might work on bringing back test_clean,
etc... some other time.

7. The `test` target now only requires libcarp.a rather than the carp
executable.

8. The `test` target is now separated from `all`.
Formatting and coding style cleanup
Remove unused options struct from carp.c main()
const-ify the message parameter to carp_vm_err() and use an explicit formatting string for fprintf()
Add CARP_CODE_NO_MEM to carp_messages
Set carp_machine_state to unused by default in the CARP_IDEF() macro to avoid unused variable compiler warnings when parameter is not used
Use proper const strings in carp_tokenizer.c and tests/ht.c
Extern carp_reverse_instr, carp_reverse_reg and carp_reverse_type instead of header-static
Use size_t (or unsigned long) where more appropriate
Remove CARP_T() macro
Minor cleanups from flycheck suggestions for carp-mode.el
Add carp binary to .gitignore