We need to be able to serialize `ViolationMessage` objects, including all their arguments. (For entity IDs store their serializations, for data values use the standard data value serialization, …)
#patch-for-review:
- [x] [serializer](https://gerrit.wikimedia.org/r/408300)
- [x] [deserializer](https://gerrit.wikimedia.org/r/408301)
- [x] [extra tests](https://gerrit.wikimedia.org/r/408302)
- [x] [entity IDs](https://gerrit.wikimedia.org/r/408303)
- [x] [entity ID lists](https://gerrit.wikimedia.org/r/408313)
- [x] [`ItemIdSnakValue`s](https://gerrit.wikimedia.org/r/408809)
- [x] [minor fix](https://gerrit.wikimedia.org/r/409887)
- [x] [data values](https://gerrit.wikimedia.org/r/409888)
- [x] [data value types](https://gerrit.wikimedia.org/r/409926)
- [x] [inline code](https://gerrit.wikimedia.org/r/409981)
- [x] [constraint scopes](https://gerrit.wikimedia.org/r/409982)
- [x] [constraint scope lists](https://gerrit.wikimedia.org/r/409983)
- [x] [languages](https://gerrit.wikimedia.org/r/409984)
- [x] [minor fix](https://gerrit.wikimedia.org/r/410151)
- [ ] [multilingual text](https://gerrit.wikimedia.org/r/410164)