CLI reconnect on disconnect, -c and -q

Along with disabling '!' event expansion, ignoring empty input (e.g. just ;), printing warnings even if there was and error and some minor refactoring/cleanup.

The -c handling is slightly ugly due to everything going through ConsoleReader right now. The next branch cleans that up changes for \i and \o support.