wire in the end-to-end model with the constraint solver

also, move back to multi-arity function constructors, since those
work better with the solver