Ne is not eq

There is not 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.