Fix #20231: Don't use allow_lazy on smart_split.
Fix #20223: Introduce keep_lazy as a replacement for allow_lazy.

The semantics stay the same but the new syntax allow the use of
keep_lazy as a decorator with the @-syntax.
It also makes sure that type parameters are passed to lazy,
which would result in an error otherwise.

The cleanups introduced in this change also incidentally fix #20222.
Fix #20221: make conditional_escape properly handle lazy strings.