Got Schur complement fieldsplit working

The two last catches:

libMesh::on_command_line didn't work the way I had assumed, so I
replaced it with code that does.

For multiplicative and schur fieldsplits, PETSc really cares what
order you declare fields in.  But we can get arbitrary order by simply
putting everything in a group, because std::map orders groups
alphabetically and libMesh declares group fields in container order.