i3 config: Kill the useless shells spawned by every exec command

My process tree had lots of things like this:
fish -c i3-sensible-terminal
 \_ xterm -l
   \_ fish

Notice the redundant shell there? Seems that i3 spawns a $SHELL for
every exec command, which will wait around for the command we actually
care about to complete before it terminates. For me every fish instance
consumed over 2M of resident memory, which adds up given how many shells
and other windows I tend to keep open.

Some shells have some smarts to detect if they are being asked to
execute a single command and will automatically exec the command instead
of running it as a child, and users of those shells won't have noticed
this behaviour.

Arguably i3 shouldn't even be using $SHELL to spawn a shell since it is
likely expecting a posix compliant shell, which $SHELL may not be. It
should probably be invoking /bin/sh directly (which would simplify all
my keybindings that actually depend on a posix compliant shell since at
the moment they all start with exec /bin/sh).

This patch adds another exec to every exec command to avoid these
redundant shells sticking around. Yes, we now have things that say bind
this key to 'exec exec' some command - the first exec is an i3 command
while the second is a shell command. Ugly, isn't it? I've tried to clean
up some of the config that was using variables so that the two execs are
always on the same line to make it somewhat bearable, but given I now
have things like "exec --no-startup-id exec sh -c '...'" it's pretty
horrible.