magit-stage-modified: new command, replacing magit-stage-all

The old command was badly named.  It uses `git add', which happens to
have an argument `--all', but the command did not use that (except with
a prefix argument), it used neither `--all' nor `--update'.

The new command uses `--update', so now deleted files are also removed,
in addition to changes to modified files being added.  Because the new
command also takes a prefix argument which means to use `--all' it is
not named `magit-stage-update' but `magit-stage-modified', which is
sufficiently distinct from the names of the arguments to `git add',
which might or might not be used.
magit-stage: small fix

Stop using `-u' when staging a tracked file, it's redundant.  Instead
proceed files with `--' guarding filenames that beginning with a dash.
magit-stage: fix staging of multiple submodules

Previously when the region being staged contained one or
more repositories `magit-stage' ended up either staging
just the one at point and nothing else, or staging the
contents of the repositories.

Also start using `magit-submodule-add' to do actually add
each module individually.  Before doing so add all regular
files if any.
magit-{,un}stage: use magit-section-case

In `magit-stage' and `magit-unstage' use `magit-section-case' instead of
`magit-section-action'.  These were the last two commands that used the
latter.
remove magit-section-action

Remove `magit-section-action'.  All commands that need to dispatch based
on the type of the section at point now do so using `magit-section-case'.

The most important of these commands are `magit-stage', `magit-unstage',
`magit-discard', and `magit-revert'.  These commands now only act on
hunks, files, and the sections containing file sections.  Until a short
while ago these commands used to also act on other section types but
that caused these commands to be severely overloaded and their purpose
to be obscured.

This has been fixed by instead using per-section-type keymaps which only
have an effect within the sections of the respective type.  By using
text-property keymaps, the same keys are bound to commands that do
things *similar* to what the respective *diff* commands mentioned above
do - but only when point is within the appropriate sections.  While e.g.
"discarding a hunk" and "deleting a branch" indeed do something similar
("throw something away"), these actions are not similar enough for it
to make sense to have one command which is capable of doing both.
Using the same key on the other hand is reasonable.

The new mechanism, per-section keymaps, is not only cleaner, it is also
more flexible and easier to understand by contributors and authors of
third-party extensions - because it is the mechanism used by everything
else for this purpose.  The alternative would have been to improve
"section actions" until finally we would have effectively reimplemented
keymaps.