ENG-5956 sqlcmd error handling improvements

Restructured try/catch blocks and a few throws especially in the area of exec parameter validation, mainly to allow more consistent options for stopping immediately on error or soldiering on, and returning a proper exit code on actual errors. But also a little bit just to eliminate redundant code.

Did NOT address the clumsy code sharing between interactive and batch modes (source of batch mode bugs and lots of unwanted complexity) 
or the lack of code sharing between batch mode and the almost-yet-should-be-more identical "script file read" mode.

Did not address needless complexity and compute costs in the LIST commands, in procedure identification, and in literal string handling.
I'm not sure of the best way to keep these in synch.

One option is for the common info to be in the readme and the rest filtered out when not needed, having to update the readme makes it slightly less likely that other detail in the README will get out of synch with the command options.

Or the readme could only contain the other detail and the current set of command options injected into it by the java code as it gets output. If it is in the java code, there are techniques to make it hard to add or change options in the working code without adding/changing the list on the usage string -- like using the same array of valid option patterns to drive both.

Another approach to keeping the two forms in synch with each other is to write a junit test that makes sure that they are in synch. This could force synched updates to both places, making it easier to remember to update the README and maybe remember to update its detailed text, not just the usage.