P2MESH: an extensible set of generic classes for PDE solvers on 2-D unstructured meshes