tickets/DM-199: Develop new master-worker result system

`std::invalid_argument` is a `std::logic_error`, which to me feels weird as a base class for an exception that gets thrown when some kind of runtime configuration is incorrect - what about inheriting from `std::runtime_error` instead?

Also - we have this `ConfigError`, `lsst::qserv::ccontrol::AsyncQueryManager::ConfigError` and `lsst::qserv::wconfig::ConfigError`. Can we have just `lsst::qserv::ConfigError`, or is it really critical to distinguish between configured components via the exception type?

I also noticed that in python, `lsst.qserv.czar.app` and `lsst.qserv.czar.config` both define a `ConfigError` - maybe those should be candidates for consolidation as well.