Implement __ne__ when __eq__ is defined
diff --git a/Lib/fontTools/misc/py23.py b/Lib/fontTools/misc/py23.py
index ff33980..0e5e45f 100644
--- a/Lib/fontTools/misc/py23.py
+++ b/Lib/fontTools/misc/py23.py
@@ -57,6 +57,8 @@
 
 		def __new__(self, content):
 			return str.__new__(self, self.transcode(content))
+		def __ne__(self, other):
+			return not self.__eq__(other)
 		def __eq__(self, other):
 			return str.__eq__(self, self.transcode(other))
 
diff --git a/Lib/fontTools/misc/transform.py b/Lib/fontTools/misc/transform.py
index 51c8da7..4fdb964 100644
--- a/Lib/fontTools/misc/transform.py
+++ b/Lib/fontTools/misc/transform.py
@@ -292,6 +292,8 @@
 		return (xx1, xy1, yx1, yy1, dx1, dy1) < \
 				(xx2, xy2, yx2, yy2, dx2, dy2)
 
+	def __ne__(self, other):
+		return not self.__eq__(other)
 	def __eq__(self, other):
 		"""Transform instances are comparable:
 			>>> t1 = Identity.scale(2, 3).translate(4, 6)
diff --git a/Lib/fontTools/ttLib/tables/DefaultTable.py b/Lib/fontTools/ttLib/tables/DefaultTable.py
index 5433cc4..33facc2 100644
--- a/Lib/fontTools/ttLib/tables/DefaultTable.py
+++ b/Lib/fontTools/ttLib/tables/DefaultTable.py
@@ -36,6 +36,8 @@
 	def __repr__(self):
 		return "<'%s' table at %x>" % (self.tableTag, id(self))
 	
+	def __ne__(self, other):
+		return not self.__eq__(other)
 	def __eq__(self, other):
 		if type(self) != type(other):
 			raise TypeError("unordered types %s() < %s()", type(self), type(other))
diff --git a/Lib/fontTools/ttLib/tables/_g_l_y_f.py b/Lib/fontTools/ttLib/tables/_g_l_y_f.py
index 659d0bb..7542b04 100644
--- a/Lib/fontTools/ttLib/tables/_g_l_y_f.py
+++ b/Lib/fontTools/ttLib/tables/_g_l_y_f.py
@@ -779,6 +779,8 @@
 
 		self.data = data
 
+	def __ne__(self, other):
+		return not self.__eq__(other)
 	def __eq__(self, other):
 		if type(self) != type(other):
 			raise TypeError("unordered types %s() < %s()", type(self), type(other))
@@ -940,6 +942,8 @@
 			self.transform = [[scale, 0], [0, scale]]
 		self.flags = safeEval(attrs["flags"])
 	
+	def __ne__(self, other):
+		return not self.__eq__(other)
 	def __eq__(self, other):
 		if type(self) != type(other):
 			raise TypeError("unordered types %s() < %s()", type(self), type(other))
@@ -1040,6 +1044,8 @@
 			py = x * t[0][1] + y * t[1][1]
 			self[i] = (px, py)
 
+	def __ne__(self, other):
+		return not self.__eq__(other)
 	def __eq__(self, other):
 		if type(self) != type(other):
 			raise TypeError("unordered types %s() < %s()", type(self), type(other))
diff --git a/Lib/fontTools/ttLib/tables/otBase.py b/Lib/fontTools/ttLib/tables/otBase.py
index 37d109d..3435986 100644
--- a/Lib/fontTools/ttLib/tables/otBase.py
+++ b/Lib/fontTools/ttLib/tables/otBase.py
@@ -286,6 +286,8 @@
 		# only works after self._doneWriting() has been called
 		return hash(self.items)
 	
+	def __ne__(self, other):
+		return not self.__eq__(other)
 	def __eq__(self, other):
 		if type(self) != type(other):
 			raise TypeError("unordered types %s() < %s()", type(self), type(other))
@@ -673,6 +675,8 @@
 		else:
 			setattr(self, conv.name, value)
 	
+	def __ne__(self, other):
+		return not self.__eq__(other)
 	def __eq__(self, other):
 		if type(self) != type(other):
 			raise TypeError("unordered types %s() < %s()", type(self), type(other))
@@ -840,6 +844,8 @@
 				value.fromXML(name2, attrs2, content2, font)
 			setattr(self, name, value)
 	
+	def __ne__(self, other):
+		return not self.__eq__(other)
 	def __eq__(self, other):
 		if type(self) != type(other):
 			raise TypeError("unordered types %s() < %s()", type(self), type(other))