855267 - CLI add product label and id whereever product name is supported

This is an initial commit for 855267; however, there may be additional
changes as testing is completed.

This commit contains changes so that anywhere a 'product name' can
be used on the CLI the user may alternatively provide product
label or id.  This is necessary because product name is not unique
(i.e. multiple products may have the same name).  As a result,
the user should provide a unique identifier for the product
when using the CLI (e.g. id).

Without this change, the CLI behavior is essentially to always use
the 'first' product returned with the name specified, which can
result incorrect behaviors.

Note: we are leaving product name in place for backward compatability
for cases where there really is only 1 product w/ a given name.  That
said, CLI will now generate an error to the user if they use a name
and it returns multiple products with that name.  That way the user may
resubmit the command using product id (for example) and ensure they
are using the desired product.
855267 - CLI - updates to errata/package/repo based on product chgs

Additional changes for errata, package and repo commands to
properly handle user identifying product by label or id.
855267 - CLI - updates to changesets based on product chgs

Additional changes so that user may specify product by name, label
or id.

This meant the addition of the following options:
--add_product_label
--add_product_id
--remove_product_label
--remove_product_id
--from_product_label
--from_product_id

Note: if there exists more than 1 product by a given name/label,
the user must use the corresponding *_product_id option.
855267 - CLI - changesets - update controller to use before_filter for product

This commit contains changes to retrieve the product as part of
a before_filter to be consistent how objects are retrieved in other
controllers.  The reason for this change is that we began seeing
find_by_cp_id! throwing an exception where find_by_cp_id
would return the object.
855267 - fixes for pylint errors
855267 - CLI - pylint, template and changeset fixes

This commit contains a couple of minor changes raised by pylint;
however, those actually exposed additional changes needed to
support the product name/label/id for changesets and templates.

Essentially, it identified that the templates had not been updated
to support the product label and id.

Also, due to similarities between the code for changesets and templates
it found found some issues with changesets, such as ensuring
that name, label, id is treated as mutually exclusive.
855267 - fix few strings based on pull request review

The review identified an error in a couple of strings
that were added for 855267.  The format for those
was actually a copy/paste from another string in the
file.  Found and fixed a few similar errors with this
commit.
855267 - changeset - moving common logic for product opts to a class method

This change is based on pull request feedback to make the 'similar'
logic for pulling product options (name/label/id) in to a common
method.
855267 - fix string issue raised in pull request review

The issue raised in the pull request review is a generic issue
that we should address throughout the CLI code.  In order to
minimize risk to current build, this commit is changing only those
raised by the review or near those lines; however, we'll want to
scrub the cli for similar changes.

The general issue raised is:
    % has to be outside of _(), otherwise translations can't work
Merge pull request #854 from bbuckingham/fork-855267

 855267 - CLI add product label and id whereever product name is used
868916 - katello-upgrade bash array fix
Merge pull request #887 from lzap/upgrade-bash-fix-868916

868916 - katello-upgrade bash array fix