Fix: Don't trigger error when editing installment of recurring SEPA contribution

An error was being generated when saving the contribution record,
because the postprocess hook for saving the mandate data didn't
explicitly exclude this case. (Mandates for recurring contributions are
not attached to the individual installments.)

Regression was probably introduced with original OOFF handling.
WIP: More generic method for truncating time from datetime string

Rather than relying on string manipulation, actually parse and reformat
the date. This allows handling dates in different formats --
specifically, both dates with separators ('-') and without.

- check for other places to do the same
- check whether some users can be simplified now
WIP: Add explicit 'Batched' option for Contribution/Group status

Add a new Option Value to the 'contribution_status' Option Group, so we
can explicitly distinguish batched contributions from unbatched
(pending) ones.

This doesn't make much difference to code complexity right now; but once
we drop use of unbatched groups, looking for unbatched contributions
directly instead, this will be *much* simpler.

From a UI point of view, this is probably clearer as well.

Only possible downside is that no longer having these contributions as
'Pending' might have side effects in other parts of CiviCRM -- whether
good or bad is hard to say...

This commit also effectively reverts
749a82e0401dc55a88832b7df09d05e2b2ec1ac6 (use ssd_file_id absence to
find pending groups), which was a precondition to the original move to
'contribution_status' for the Group status; but is no longer necessary,
now that we can use the status to find unbatched groups again.

- probably should fold this into relevant earlier commits:
  - use ssd_file_id absence to find pending groups (drop)
  - batch_status -> contribution_status (bulk of changes)
  - status update actions (update status values)
Dashboard: Fix assigning per-status classes to rows (groups)

We do not currently use these classes for anything -- but we might in
the future... Better fix it now.