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