Manifold id step0

This is the first backward compatible version of the manifold id branch. Four methods were added to a class named Manifold<dim,spacedim>, which contains a subset of the  Boundary<dim,spacedim> methods. Boundary<dim,spacedim> is now derived from FlatManifold<dim,spacedim>. This fixes issue #27.

The new methods are:

get_new_point_on_cell
get_new_point_on_hex
get_new_point
project_to_manifold

all functions get_new_point_on_* are now made such that by default they call get_new_point, which in turns query project_to_manifold with the averaged point.

This sounds a little intricate, but it is a way to keep backward compatibility while starting with the new idea about manifolds (seen as collection of points with a metric), where by default the new point is created by averaging the surrounding points, and projecting back the result to the manifold.

Simple implementations can implement the

Manifold::project_to_manifold

function, and everything should work out of the box. More complex implementations should implement

Manifold::get_new_point

New implementations should not need to go behyond this. 

ManifoldChart<dim,spacedim,chartdim> is a special implementation in which push_forward and pull_back mechanisms are used to determine the location of new points. All surrounding points are pulled_back, then averaged, and the result is pushed_forward. This is a standard concept in continuum mechanics, and it is the standard way in which geometry points are computed in isogeometric analysis. 

The old Boundary class is still kept around. It is still used for normals to surfaces. This concept it typical of codimension one manifolds, and it is therefore not embedded in the Manifold class itself, but left to the derived class Boundary<dim,spacedim>.


This kind of logic used to work well in the past where the centers of interior lines was always at the center(), so the two branches of the ?: only made a difference for edges at the boundary and there we always chose the first branch because we refined edges and faces before we got to the cell. 

But now, I'm no longer sure this is true. My intuition would be that we refine the edges before the cell, so we could always take the first branch and add an assert
  Assert (obj->line(i)->has_children(), ExcInternalError());
Because, if the assertion is not true, then we will place the new center of the object to different locations depending on whether the neighbor is refined before this cell, or the other way around. This is likely not what we had in mind.