Entry point
This does three things.
One, it initializes the program, providing support for termination signals, preparing console linebuffering, and relaxing encoding errors.
Two, it processes (via an IO action) response files, calling expandResponse in Cabal/Distribution.Compat.ResponseFile
Note that here, it splits the arguments on a strict match to "--", and won't parse response files after the split.
Three, it calls the mainWorker, which calls the argument parser,
producing CommandParse data, which mainWorker pattern-matches
into IO actions for execution.