Currently the pass manager is created before parsing, which requires an
assumption that the top-level operation will be builtin.module.
Delaying the creation allows for using the parsed top-level operation as
the PassManager operation instead.
A followup change will allow for parsing top-level operations other than
builtin.module.
This function is quite tricky in terms of invariant, and in particular the lifetime expectation for enableVerifier and enableThreading. Not the FIXME above, adding enableVerifier isn't going in the right direction here.