Finished cleaning Basics, Began surfaces

Basics is now a bit better optimized. It's so late I've forgotten what
optimizations I did, but in general I used a lot more vector math and a
lot less clunky distance calculations.

Surfaces are functions of two variables. The surface parent class has
methods to shift points, edges, and tris by their functional values, as
well as a function to find directional derivatives and a function to
wrap a vector onto a surface.

Surface subclasses (e.g. wave) have methods __init__, f, and grad. f
returns functional value for a point, and grad returns gradient for a
point.