Refined mesh surface extraction

Added an angle-parameter to extract surfaces more precisely.
Before: All surfaces were extracted where the normal didn't deviate from the given vector by more than 90 degrees.
Now: All surfaces are extracted where the normal doesn't deviate from the given vector by more than the given angle, with 0 < angle < 90 degrees.
An idea outside of this PR:
If we provide virtual clone() function for elements, this type comparisons (for all known types) and the new would reduce to `face->clone()`.
What do you think?