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.
why not 0 <= angle < 90? isn't it angle==0 means the vector is exactly same as `dir`?