Auto generate Op.{hash,eq,str}

Added __eq__ and __hash__ to Op Class and deleted them in function with props attribute.
This should print all the properties in key=value form.  Not just the values.  You would have to do something like `("%s=%r" % (p, getattr(self, p))) for p in self.__props__` inside your join.

Also you should add a check that doesn't add the '{}' part when \__props__ is an empty tuple.