Small tweaks to OS plugins.
Tweak type_error_msg utility.
Add is_program_installed and info_v utilities.

- `is_program_installed` checkes if an executable is found

- `info_v` is like `info`, except only prints if `is_verbose()` is True
Remove unused import.
config_utils: new helper for easier access to default values.
config: added get_default_config for easy access to default config dict
config: core_installers is now not os option
installers: major rework

- `Installer` now abstract base class using `plugin_utils`.

  - added prerequisite abstraction with new `InstallerPrerequisiteError` exception
  - added options
  - use `config_utils` to describe and parse options and rules_definitions

- `InstallerBase` implements some common functionality and defaults.

- `PackageManagerInstaller` implements more common functionality for
  package manager based installers, for example checks if the
  package manager itself is installed and up-to-date, hooking into
  the new `prerequisites` abstraction of `Installer`.

- Updated implemented plugins.

- Updated `InstallerContext` to changes to os and installer plugins.

- Update `resolve` and `lookup` verbs

- Updated unit tests