squash! rebase -i: hide interactive command messages in verbose mode

rebase -i: hide interactive command messages in verbose mode

git-rebase--interactive prints summary messages of the commits it
creates in the final history only if the `--verbose` option is
specified by the user and suppresses them otherwise. This behaviour
is implemented by wrapping git-commit calls in a shell function named
`output` which redirects stderr to stdout, captures stdout in a shell
variable and ignores its contents unless the command exits with an
error status.

The command lines used to implement the to-do list commands `reword`
and `squash` print diagnostic messages even in non-verbose mode. The
reason for this inconsistency is that both commands launch the log
message editor which usually requires a working terminal attached to
stdin. Wrapping the `reword` and `squash` command lines in `output`
would seemingly freeze the terminal (see commit 7725cb5, "rebase -i:
fix reword when using a terminal editor"). Temporarily redirect the
editor output to a third file descriptor in order to ship it around
the capture stream. Wrap the remaining git-commit command lines in
the new `output`.

In order to temporarily redirect the editor output, the new
definition of `output` creates a script in the state directory to be
used as `GIT_EDITOR`. Make sure the state directory exists before
`output` is called for the first time.

fake_editor prints the to-do list before and after applying the
`FAKE_LINES` rewrite rules to it. Redirect this debug output to
stderr so that it does not interfere with the git-rebase status
output. Add test.