s_expressions-printers-pretty: redesign the package around an abstract type with user-provided backend write procedure