Make `ConstraintParameterException` accept a `ViolationMessage` instead of a `string`. (For a short transition period, probably both, just like `ViolationMessageRenderer::render`.) The string message passed to the superclass constructor can probably just be the message key – it should never be seen anyways.
Note that this requires {T185999}, since CPEs are serialized and deserialized by `SparqlHelper` in the regex cache.
#patch-for-review:
- [x] [inject serializers](https://gerrit.wikimedia.org/r/410420)
- [x] [preparation in tests](https://gerrit.wikimedia.org/r/411303)
- [x] [preparation in `ConstraintParameterException`](https://gerrit.wikimedia.org/r/411304)
- [x] [preparation in `DelegatingConstraintChecker` + tests](https://gerrit.wikimedia.org/r/411305)
- [ ] [preparation in `SparqlHelper`](https://gerrit.wikimedia.org/r/411306)
- [ ] [preparation in `CheckConstraintParameters`](https://gerrit.wikimedia.org/r/411307)
- [ ] [add support in `ConstraintParameterException`](https://gerrit.wikimedia.org/r/411308)
- [ ] minor `ViolationMessageRenderer` fixes [1](https://gerrit.wikimedia.org/r/412689), [2](https://gerrit.wikimedia.org/r/412690)
- [ ] [update `ConstraintParameterParser`](https://gerrit.wikimedia.org/r/411309)
- [ ] [evict old-style CPE serializations](https://gerrit.wikimedia.org/r/412675)