Make ForemanTask.read deal with non-existent tasks

If method `ForemanTask.read` is called and the requested task does not exist,
raise `robottelo.entities.ReadError`. Formerly, the operation would succeed, and
an empty dict would be returned.

Also, fix a few formatting nitpicks. Remove spurious whitespace and parentheses.
Merge pull request #1214 from Ichimonji10/foreman-tasks

Make ForemanTask.read deal with non-existent tasks
Sorted `entities.py` classes alphabetically.

Noticed that ``entities.ForemanTask`` was not placed in alphabetical
order, so this fixes it. :)
Merge pull request #1215 from omaciel/sort-entities

Sorted `entities.py` classes alphabetically.
test to create a filter
Added extra API paths to content views.

Added the following new API paths to entities related to content views:

* ``entities.ContentView``
  * ``content_view_versions`` - List content view versions
  * ``publish`` - Publish a content view
  * ``available_puppet_module_names`` - Get puppet modules names that are available to be added to the content view
* ``entities.ContentViewVersion``
  * ``promote`` - Promote a content view version

I have also added two new helper methods, namely
``entities.ContentView.publish`` and
``entities.ContentViewVersion.promote`` to handle publishing and
promotion of content views with (hopefully) an easier syntax, as shown
below. Assuming you had a `content-view` with ``id=3``:

```pycon
In [1]: from robottelo.api import client

In [2]: from robottelo import entities

In [3]: from robottelo.common.helpers import get_server_credentials

In [4]: cv = client.get(entities.ContentView(id=3).path(), auth=get_server_credentials(), verify=False).json()

In [5]: cv['versions']
Out[5]:
[]

In [6]: task = entities.ContentView(id=99).publish().json()

In [7]: entities.ForemanTask(id=task['id']).poll()
Out[7]:
{u'cli_example': None,
 u'ended_at': u'2014-08-20T19:04:39Z',
 u'humanized': {u'action': u'Publish',
  u'errors': [],
  u'input': [[u'content_view',
    {u'link': u'#/content_views/3/versions', u'text': u"content view 'Foo'"}],
   [u'organization',
    {u'link': u'/organizations/3/edit', u'text': u"organization 'Oregon'"}]],
  u'output': u''},
 u'id': u'2af5f92e-1143-488f-9ba4-61fafc8f6e20',
 u'input': {u'content_view': {u'id': 3, u'label': u'Foo', u'name': u'Foo'},
  u'content_view_id': 3,
  u'environment_id': 4,
  u'history_id': 14,
  u'locale': u'en',
  u'organization': {u'id': 3, u'label': u'Oregon', u'name': u'Oregon'},
  u'user_id': 3},
 u'label': u'Actions::Katello::ContentView::Publish',
 u'output': {},
 u'pending': False,
 u'progress': 1.0,
 u'result': u'success',
 u'started_at': u'2014-08-20T19:04:29Z',
 u'state': u'stopped',
 u'username': u'admin'}

In [8]: cv = client.get(entities.ContentView(id=3).path(), auth=get_server_credentials(), verify=False).json()

In [9]: cv['versions']
Out[9]:
[ {u'environment_ids': [4],
  u'id': 10,
  u'published': u'2014-08-20T19:04:29Z',
  u'version': 1}]

In [10]: task = entities.ContentViewVersion(id=10).promote(5).json()

In [11]: entities.ForemanTask(id=task['id']).poll()
Out[11]:
{u'cli_example': None,
 u'ended_at': u'2014-08-20T19:13:53Z',
 u'humanized': {u'action': u'Promotion',
  u'errors': [],
  u'input': [[u'content_view',
    {u'link': u'#/content_views/3/versions', u'text': u"content view 'Foo'"}],
   [u'organization',
    {u'link': u'/organizations/3/edit', u'text': u"organization 'Oregon'"}]],
  u'output': u''},
 u'id': u'd61a26e6-dca6-4014-be29-86779ca2308f',
 u'input': {u'content_view': {u'id': 3, u'label': u'Foo', u'name': u'Foo'},
  u'content_view_id': 3,
  u'environment_id': 5,
  u'environment_name': u'DEV',
  u'history_id': 15,
  u'locale': u'en',
  u'organization': {u'id': 3, u'label': u'Oregon', u'name': u'Oregon'},
  u'user_id': 3},
 u'label': u'Actions::Katello::ContentView::Promote',
 u'output': {},
 u'pending': False,
 u'progress': 1.0,
 u'result': u'success',
 u'started_at': u'2014-08-20T19:13:45Z',
 u'state': u'stopped',
 u'username': u'admin'}

In [12]: cv = client.get(entities.ContentView(id=3).path(), auth=get_server_credentials(), verify=False).json()

In [13]: cv['versions']
Out[14]:
[{u'environment_ids': [4, 5],
  u'id': 10,
  u'published': u'2014-08-20T19:04:29Z',
  u'version': 2}]
```

Finally, also added tests for the new paths:

```bash
Test :meth:`robottelo.entities.ForemanTask.path`. ... ok
Test what happens when no entity ID is provided and ``which=path``. ... ok
Test what happens when no entity ID is provided and ``which=path``. ... ok
Test what happens when no entity ID is provided and ``which=path``. ... ok
Test what happens when no entity ID is provided and ``which=path``. ... ok
Test what happens when no entity ID is provided and ``which=path``. ... ok
Test what happens when no entity ID is provided and ``which=path``. ... ok
Test what happens when no entity ID is provided and ``which=path``. ... ok
Test what happens when an entity ID is given and ``which=which``. ... ok
Test what happens when an entity ID is given and ``which=which``. ... ok
Test what happens when an entity ID is given and ``which=which``. ... ok
Test what happens when an entity ID is given and ``which=which``. ... ok
Test what happens when an entity ID is given and ``which=which``. ... ok
Test what happens when an entity ID is given and ``which=which``. ... ok
Test what happens when the ``which`` argument is omitted. ... ok
Test what happens when the ``which`` argument is omitted. ... ok
Test what happens when the ``which`` argument is omitted. ... ok
Test what happens when the ``which`` argument is omitted. ... ok

----------------------------------------------------------------------
Ran 18 tests in 0.006s

OK
```
Merge pull request #1219 from omaciel/content-view-api

Added extra API paths to content views.
Fix OneToManyField, simplify OneToOneField

The methods `Factory.build` and `Factory.create` misbehave when a
`OneToManyField` is involved. For example, the following both raise exceptions:

    entities.Filter(role=N, permission=[X, Y, Z]).build()
    entities.Filter(role=N, permission=[X, Y, Z]).create()

(For the above example, you'll need to fix up `Filter`, the letters above all
represent numbers. Just follow the example.)

Attempting to fix the above exceptions as-is is challenging, because the
implementation of `OneToManyField` is highly complicated. Thus, do the
following:

* Greatly simplify the implementation of `OneToManyField` so as to be much more
  comprehensible to mere mortals.
* Simplify the implementation of `OneToOneField` so that it is highly similar to
  the implementation of `OneToManyField` - and therefore easy to understand.
* Update the set of unit tests for methods `OneToOneField.get_value` and
  `OneToManyField.get_value`.

With this done, also fix up the implementation `Factory.build` to properly deal
with `OneToManyField`s.
test to create a filter
Slightly clean up and flesh out an API test
Added test for add-contenthost/removecontenthost for host-collection
Fixed few more UI tests
resolved conflicts
Merge pull request #1216 from sghai/fix-test

Fixed few more UI tests
Merge pull request #1220 from Ichimonji10/one-to-n-field

Fix OneToManyField, simplify OneToOneField
implemented activation key test test_positive_create_activation_key_5
fixed the add/removecontent-host test for hostcollection
Merge pull request #1217 from alda519/709_act_key

implemented activation key test test_positive_create_activation_key_5
fixed the add/removecontent-host test for hostcollection
Merge pull request #1221 from tkolhar/test_cli

Added test for add-contenthost/removecontenthost for host-collection