Make individual ORM fields generate values

Remove function `robottelo.factories._get_random_value`. Push the functionality
formerly contained in that down into individual field classes in module
`robottelo.orm`.

Change how field name mappings are used

Remove method `robottelo.factories.Factory._customize_field_names`. Push the
functionality of that method out into function
`robottelo.factories._copy_and_update_keys`. Doing this allows for easier
testing and fewer side-effects.

Change how field name mappings are created. Do not create dicts like this:

    api_names = {
        'name': 'model[name]',
        'info': 'model[info]',
    }

Instead, create two-tuples like this:

    api_names = (
        ('name', 'model[name]'),
        ('info', 'model[info]'),
    )

Update the codebase to reflect these changes.

Completely rewrite module `robottelo.factories`

Make class `robottelo.factories.Factory` a base class that is, by itself,
useless. Make this base class interact with subclasses in well-defined ways, and
re-implement {Host,Model,Organization,Product}Factory as subclasses of Factory.

This change breaks both client code and tests. Code in modules
`tests.robottelo.test_factories` and `tests.foreman.api.test_X_v2` must be
rewritten.

Instance methods `Factory.attributes` and `Factory.create` have been implemented.

Update API tests to use new factory implementation

Update tests for module robottelo.factories

Add new tests for entity "Model"

Update docstrings

Create class EntityFactoryMixin

Move class Factory to module robottelo.factory. Create a second class in that
same module named EntityFactoryMixin. This has been done, in part, to fix a
circular import issue. It also fixes a possible namespace clash: module
robottelo.factories now includes *only* concrete factories, and those concrete
factories are named after the entities they build.

The new class EntityFactoryMixin is capable of being inserted into an Entity's
class hierarchy as a mixin. If done, the entity will inherit the methods
attributes() and create(), plus a couple other private methods necessary to
everything work.

Use class EntityFactoryMixin with all four existing entities.

Use entity factories in tests

Update tests, docstrings, var and function names

* Update tests in module `tests.robottelo.test_factories` and
  `tests.robottelo.test_orm` with better assertions.
* Update docstring for class `robottelo.factory.EntityFactoryMixin`.
* Rename method `_is_required` to `field_is_required` in module
* `robottelo.factory.`
* Rename the variable `type_` to `field` in several locations.

rebase me