errors: return more detailed errors when failing to parse or apply patch
This patch adds subclasses of PatchError so we can distinguish
between failure to parse a patch from failure to apply it. It updates
the callers to raise either InputError or StateError depending on
which type of error occurred.
Differential Revision: https://phab.mercurial-scm.org/D11824