Add test of PyOP2 class behaviour
Implement __instancecheck__ and __subclasscheck__ in backends

Previously, PyOP2 objects did not behave quite as one would expect them
to:

    from pyop2 import op2
    op2.init()
    s = op2.Set(1)
    isinstance(s, op2.Set) => False
    issubclass(type(s), op2.Set) => False

Since type(s) is op2.base.Set and type(op2.Set) is
op2.backends._BackendSelector.  By implementing custom __instancecheck__
and __subclasscheck__ methods in the _BackendSelector, we can provide
the user with the expected behaviour, so that now isinstance(s, op2.Set)
is True.
Simplify instance checks in codebase

Now that isinstance(s, op2.Set) and friends do the right thing, we can
simplify how we check for instances.
Merge pull request #260 from OP2/fix-isinstance

Make isinstance and issubclass behave as a user might expect on PyOP2
objects.  Previously:

    isinstance(op2.Set(10), op2.Set) => False
    issubclass(type(op2.Set(10)), op2.Set) => False

Now we get the expected:

    isinstance(op2.Set(10), op2.Set) => True
    issubclass(type(op2.Set(10)), op2.Set) => True