supporting higher order elements

I'd like to hear your opinion about how to implement the order-dependent edge nodes information. For example, Quad4 should return edges with 2 nodes and Quad8 return with 3 nodes. Since the information (topological rule) is currently stored in static member variable `_edge_nodes`, it is not possible to change its content and size in derived classes.  

My current approach implemented in this PR is passing the information as an additional template parameter to element classes. Let me know if you have better idea.

please ignore Line3 as it doesn't have the problem.

Just a question not related to this PR:  Is it good to allow  ``getEdgeNode``  return non-const pointer?