Improve all "apply" variants

* More clearly tell the variants *unstage*, *reverse*, and *discard* apart.
* Same feature set for all variants, most importantly allow applying multiple files at once.
* Refactor low-level.