magit-branch: new command, adjust popup
drop `dirty' submodule section type

Just use `diff' for now, like for submodules with committed changes.
While a `dirty' (only) submodule cannot be staged many other commands
are valid, and these have not yet been defined for the `dirty' type.
magit-describe-section: show value again
magit-wash-commit: don't call magit-wash-diffstats directly

We also call `magit-wash-diffs' here and that already calls the latter.
magit-unambiguous-refname-p: fix inverted return value

This fixes 34281ba7785d26e6113f6190868cd3c86404093d which attempted
replaced `magit-AMBIGUOUS-refname-p' with `magit-UNambiguous-refname-p'.
However it only changed the function name and documentation, not what
it actually does.
magit-font-lock-keywords: fix for Emacs version 24.4
use the diff buffer to show stashes

Originally we used a separate buffer for stashes
`magit-stash-buffer-name', some time ago we switched to using
`magit-commit-buffer-name' which was a mistake, instead we should use
`magit-diff-buffer-name' because `magit-diff-stash' is a "diff" variant.

Change that in `magit-diff-stash' and in `magit-show-or-scroll' (which
was still using the stash specific buffer and thus never succeeded).
Remove `magit-stash-buffer-name' variable.
magit-show-or-scroll: use correct range when showing stash

`magit-diff-stash' actually displays the diff for the range
"stash@{N}^2^..stash@{N}".  We therefor have to use that same range not
just "stash@{N}" in `magit-show-or-scroll' when determining whether the
diff buffer is currently displaying a particular stash.
magit-show-or-scroll-{up,down}: fix doc-strings
magit-{popup,tests}-font-lock-keywords: new options

Seed them with keywords previously defined in `magit-font-lock-keywords'.
Merge branch 'n/stash-scroll' into next
magit-{stgit,topgit}: don't use action hooks

Do not use "action" hooks such as `magit-visit-hook' run by the command
`magit-visit' to add "specialized variants" of these actions for section
types added by extensions.

Such hooks are implemented using `magit-section-action' and I think that
adding this extension mechanism was a mistake in the first place.  Emacs
already has an extension mechanism that can be used to do this sort of
thing: the `keymap' text property.

Replace all uses of action hooks in `magit-stgit' and `magit-topgit by
using that `keymap' property for the text that is part of such
additional sections.

Both extension mechanisms have advantages and disadvantages.  Most
importantly the use of the `keymap' text property means that it is no
longer possible to change just one keymap to use another key for an
action, not only for core commands but also those defined by extensions.
On the other hand there now is a place where users can look to get a
list of all "special commands for a certain section type", the
respective keymap.
magit-topgit: don't overload core commands

Previously `magit-topgit-mode' added specialized functions to four
different command-specific hooks run by fundamental commands that are
part of Magit's core.  These commands did only run these hooks so that
`magit-topgit' could override the behavior of these commands.  I think
the behavior should never be overwritten in such a way.  And the core
of Magit certainly shouldn't be obfuscated to accommodate an extension
hardly anybody uses (280 downloads from Melpa, Magit itself has 57000).

Regardless of whether doing what we used to do is okay or not, we don't
have to do so because there is a better option: use a popup just for
TopGit commands.  Being parasites the TopGit "commands" where not
actually commands but regular functions, so that has to be fixed too.
magit-push: absorb magit-push-dwim

For a while we had a command `magit-push-dwim' separate from
`magit-push' for two reasons:

`magit-push' used to run hook `magit-push-hook' allowing `magit-topgit'
to override its behavior.  Since the previous commits we no longer use
it that way.

Since that hook existed anyway I decided to rename `magit-push's legacy
implementation to `magit-push-dwim' and add a new `magit-push' that did
run that by default.  This was done in preparation of the still
outstanding deprecation of the legacy implementation, which I think is
fairly bad, because it overloads pushing with only marginally related
functionality and departs to much from what Git does.

However there likely are some users who disagree and I intended to keep
the old implementation which for a while was known as `magit-push-dwim'
under the name `magit-push-oldschool', it is now known as just
`magit-push' again and is still going to be deprecated eventually.
magit-topgit-wash-topic: keep flags

Refactor `magit-topgit-wash-topic', making in readable and shrinking
it considerably.  In the process stop losing information (by no longer
removing the flag characters, only two out of seven were and still are
represented with face attributes), remove the unnecessary and ugly
`magit-topgit-parse-flags' and add the face `magit-topgit-empty'
(instead of hardcoding the appearance).
magit-stgit-popup: new popup
magit-svn.el: cosmetics
magit-topgit.el: cosmetics
magit-{stgit,svn,topgit}.el: add longer library commentaries

In return remove information about these extensions from `magit.texi'
and `magit.info' generated from the former.
magit-{stgit,svn,topgit}-mode-lighter: new options