Boundary element generator

This changeset aims to provide a tool to extract boundary elements from an existing domain mesh. The boundary elements will be used when we applying 2nd and 3rd boundary condtions (i.e. we need to integrate shape functions over boundaries).
yes, `auto` is `const Element*` there because `_mesh` is const. otherwise, one needs to write `const_cast` explicitly as usual.