WIP #16464 generalised zipWith for up to 22 param functions

Train rides indeed are great for some kinds of work... :-)

Uses sbt boilerplate plugin (it's awesome, kudos @jrudolph) to generate all the 22 versions of the zipwith classes.
See "can work with 22 params" test to see what this effectively means.

TODO:
- [ ] java api?
- [ ] look at it again to see if no silly design mistakes
- [ ] maybe be able to avoid `def f: Any`?
Oh, nice one! `ZipWith(Person(_, _, _))` :-)