Feature mesh

Dear all,
Here is the implementation of the stand-alone mesh.
Files:
 - abstractmesh.py: abstract interface for the class
 - mesh.py: current implementation of the mesh and the different types of elements.
 - test_mesh.py: the set of unitary tests for the class.

Please be wellcome to review the code and point out any suggestion or improvement.
Br. 

I am a little confused on how the common points in elements (edges, cells etc) are kept up to date.

Here is some example code. I would have expected the first point of the edge to be updated in the last print statement.

p1 = Point(0, (0.0, 0.0, 0.0), dc.DataContainer(), dc.DataContainer())
p2 = Point(1, (1.0, 1.0, 1.0), dc.DataContainer(), dc.DataContainer())

edge = Edge(0, [p1, p2], dc.DataContainer(), dc.DataContainer())

mesh = Mesh()
mesh.add_edge(edge)
print(mesh.get_edge(0).points[0].coordinates)
p1.coordinates = (42.0, 42.0, 42.0)
mesh.update_point(p1)
print(mesh.get_edge(0).points[0].coordinates)
'