Merge feature/mortar into develop

the Mortar feature branch brings a few new features: 

Range for loops 
-----------------------

Range for loops (C++11 construct) are available for mesh filters 
```
for( auto bface  :  boundaryfaces(mesh) )
{
 // do something with bface. bface is a mesh face and not an iterator
}
for( auto elt  :  elements(mesh) )
{
 // do something with elt. elt is an mesh element and not an iterator
}
```

Dof Table
--------------

 * the dof table has been split into different files in order to simplify the maintenance and changes
   * `DofFromElement`
   * `DofFromBoundary`
   * `DofFromPeriodic`
 * introduce `DofFromMortar` to handle mortar discretisation

FunctionSpace
----------------------

introduce `mortars<>` to define a Mortar function space
```
// none mortar function space (default)
FunctionSpace<bases<Lagrange<2>>,mortars<NoMortar>> P2ch;
// Mortar function space
FunctionSpace<bases<Lagrange<2>>,mortars<Mortar>> Moch;
```

by default `mortars<NoMortar>` is passed to `FunctionSpace`