Implement __ne__ magic methods to complement __eq__

Quoting from http://docs.python.org/2/reference/datamodel.html#object.__eq__

There are no implied relationships among the comparison operators. The
truth of x==y does not imply that x!=y is false. Accordingly, when
defining __eq__(), one should also define __ne__() so that the
operators will behave as expected.
Add Arg API unit tests
More rigorous equality and inequality unit tests.
Merge pull request #210 from OP2/ne-is-not-eq

There is no implied relationship between comparison operators in
python. Hence we need to complement each `__eq__` with a matching
`__ne__` to get the expected behaviour.

Also add more rigorous API unit tests for equality and inequality.