Initial import.
2D geometry functions
Matrix slices in column major; cleaned up geometry classes by adding "connect"
method.
Added 3D classes.
Double-dispatch transforms for geometry
setup.py for registering with PyPI
Fix to __slots__ option; enabled by default (benchmarks faster)
Merge refactor branch 10:11 in.
Documentation update for Plane
Add __getstate__ and __setstate__ methods to all classes to allow pickling of
objects even with __slots__.


Index: euclid.py
===================================================================
--- euclid.py	(revision 18)
+++ euclid.py	(working copy)
@@ -56,11 +56,32 @@
 # Implement _use_slots magic.
 class _EuclidMetaclass(type):
     def __new__(cls, name, bases, dct):
+        if '__slots__' in dct:
+            dct['__getstate__'] = cls._create_getstate(dct['__slots__'])
+            dct['__setstate__'] = cls._create_setstate(dct['__slots__'])
         if _use_slots:
             return type.__new__(cls, name, bases + (object,), dct)
         else:
-            del dct['__slots__']
+            if '__slots__' in dct:
+                del dct['__slots__']
             return types.ClassType.__new__(types.ClassType, name, bases, dct)
+
+    @classmethod
+    def _create_getstate(cls, slots):
+        def __getstate__(self):
+            d = {}
+            for slot in slots:
+                d[slot] = getattr(self, slot)
+            return d
+        return __getstate__
+
+    @classmethod
+    def _create_setstate(cls, slots):
+        def __setstate__(self, state):
+            for name, value in state.items():
+                setattr(self, name, value)
+        return __setstate__
+
 __metaclass__ = _EuclidMetaclass
 
 class Vector2:
Local variable optimisations from Will McGugan.
Fixes to matrix multiplication from expresionista
Issue 2: fix __ne__ error.
Issue 3: typo in Point3.connect
Remove unnecessary __setitem__ assertion in Matrix4