Ne is not eq

The 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 rigurous API unit tests for equality and inequality.