magit-define-section-jumper: teach created functions how to expand

Functions created with macro `magit-define-section-jumper' now take an
optional EXPAND argument, interactively a prefix argument can be used.
When that is non-nil, the section being jumped to is also expanded.
magit-commit: tell magit-jump-to-staged to also expand

In `magit-commit' tell `magit-jump-to-staged' to also expand,
instead of doing it lexically within the former.
add function magit-commit-maybe-expand

Add function `magit-commit-maybe-expand' and use it in `magit-commit'.
magit-commit-maybe-expand: add argument to allow expanding unstaged
add function magit-commit-assert

Add function `magit-commit-assert' and remove the sanity checks and
alternative exit points previously located in `magit-commit' there.

It returns either the arguments, or `t' if their are no arguments to
tell the caller to actually perform the commit.  For that reason
`magit-commit-internal' has to be taught that its ARGS being `t' now
means 'no arguments'.

New exit points will appear soon and that will make it hard to add
extend these checks and alternative code paths without resorting to
things like `return'.  This is the best alternative could see,
considering new commands will be created soon, that need the same
checks.
add option magit-commit-ask-to-stage

Add option `magit-commit-ask-to-stage'.  If it is non-nil and nothing
is staged then `magit-commit-assert' expands the unstaged changes.

This partially restores a similar feature that was available before the
switch to `git-commit-mode', and also extends it.  It is now less
flexible in that it is a simple boolean.  On the other hand it shows
the unstaged changes to the user, making it easier for him to make up
his mind.
magit-mark-commit: run new magit-mark-commit-hook

In `magit-mark-commit run the new hook `magit-mark-commit-hook'.
Do not explicitly declare the hook variable, at this point it is
not intended to be used by third-party code.
add new command magit-commit-amend
add new commands magit-commit-{extend,reword}

Add the new commands `magit-commit-extend' and `magit-commit-reword',
as well as the options `magit-commit-extend-override-date' and
`magit-commit-reword-override-date'.
magit-mode-quit-window: run new magit-mode-quit-window-hook

In `magit-mode-quit-window' run the new hook
`magit-mode-quit-window-hook'.  Do not explicitly declare the hook
variable, at this point it is not intended to be used by third-party
code.
add new commands magit-commit-{fixup,squash}

Add the new commands `magit-commit-fixup' and `magit-commit-squash'
as well as the option `magit-commit-squash-commit, the variables
`magit-commit-squash-args' and `magit-commit-squash-fixup', and the
functions `magit-commit-squash-commit', `magit-commit-squash-marked',
and `magit-commit-squash-abort'.
Merge branch 'pr/squash'