framework/status.py: Replace subclasses with constants

This patch replaces the flyweight children of Status with a single class
that is initialized with arguments, and provides constants. These
constants are mostly immutable in the cleanest was possible (they're not
if you really want to go after them, but short of Cython or a native C
extension it's impossible to make a truly immutable object in python).

What this provides for us is a simple, clean interface, a massive
reduction in code, and better compatibility for python 3 (the previous
implementation relied on a behavior of __slots__ that changed in python
3), and minimal API changes.

Signed-off-by: Dylan Baker <baker.dylan.c@gmail.com>
framework/tests/status.py: Add test for status in list syntax

Currently a comparison like this will raise an error:
framework.status.Pass() in ['pass']

This patch adds a test for this bug

Signed-off-by: Dylan Baker <baker.dylan.c@gmail.com>
framework/status.py: Fix bug in Status.__eq__

Because Status.__eq__ didn't have the ability to compare str or unicode
instances, using Pass() in ['pass'] would raise an exception. With this
patch that is no longer the case, and that syntax works fine.

Signed-off-by: Dylan Baker <baker.dylan.c@gmail.com>
framework/tests/status_tests.py: remove equivalency tests

These tests are not actually relevant, they were for testing the
definition of a docstring that was incorrect. That docstring was
updated, but the corresponding tests where not completely removed, which
means these tests ended up testing pass == pass, skip == skip, etc. Not
very useful

Signed-off-by: Dylan Baker <baker.dylan.c@gmail.com>
framework/tests/status_tests.py: Pretty up the output

This makes the changes cosmetically more pleasing, but doesn't affect
the functionality of the tests at all.

Signed-off-by: Dylan Baker <baker.dylan.c@gmail.com>