Engine: integrate behavior from katello-foreman-engine & foreman-katello-engine

This commit contains several changes to pull in logic/behavior
from the katello-foreman-engine (and some from the
foreman-katello-engine).  Prior to katello becoming an engine, it
utilized those engines (gems) to support the katello-foreman
integration.  At that time, katello and foreman were 2 separate
applications and much of the integration was accomplished
by katello performing REST API calls on foreman to make it aware
of various activities in katello.

Now that katello is an engine running from within the
foreman application, the behaviors provide by the other
engines can be integrated directly in the katello engine.
So rather than katello performing REST calls, it can
interact directly with the foreman models.

Below is a summary of some of the changes:
1.  during content view publish/refresh/promotion:
  - update foreman data, such as:
    - create install media (if needed)
    - create operating system (if needed)
    - create architecture (if needed)
    - create puppet environment (if needed)
    - import puppet classes (if needed)
2. during content deletion (e.g. deletion changeset)
    - delete foreman puppet environment

Notes:
- app/models/katello/concerns: environment, medium and
  operatingsystem extension files were added to
  provide helper methods to the corresponding
  foreman models
- app/services/katello: puppet_class_importer extension
  added to provide helper methods to the foreman service
- app/lib/foreman.rb was added to provide helper methods
  that span multiple models
- db/migrate: migrations from foreman-katello-engine to
  support adding ConfigTemplates and Environment.katello_id
  used to support katello integraiton
- app/view/foreman/unattended: contains the configuration
  templates that get added as part of the above migrations
Engine: pull in foreman defacing from foreman-katello-engine

This commit pulls in the logic from foreman-katello-engine
to deface the hostgroup and host UIs.  This is to add support:

- associating katello environment & content view with hostgroups
  and hosts
- assocate katello activation keys with hostgroups

This commit does contain several changes to work with the latest
foreman UI, which has changed causing the existing code not to work.

This commit is only intended to pull over the existing functionality;
however, we plan to revisit it later further improvements.
Engine: integration: rubocop updates
Merge pull request #3576 from bbuckingham/engine-integration

Engine: integrate behavior from katello-foreman-engine & foreman-katello-engine