Refactor error handling system by using die()

Defined error messages have also been replaced with string literals.
Merge all redo-*.c files into redo.c.

The resulting redo binary behaves differently if called with each
respective redo-* name, and is symlinked to the different command names.

This should reduce the memory footprint of a redo build, as the OS only
needs to keep one copy of the redo code in memory.