Add function to return the basis functions of a BSpline.

This simplifies the implementation of NurbsSurface.
Add NurbsSurface to splines library
Add unit tests for NurbsSurface, associated knot / spline functions
Add tests for surfaceGrid

add cylinder to Tests -- should not depend on Diagrams!
findSpan: return Nothing if u is outside domain
add QuickCheck invariants for NurbsSurface
remove whitespace at end of line
fix type error in Tests.hs
hlint warnings on Tests.hs
follow hlint suggestions on NurbsSurface.hs
use ~~ approximate equality to test SurfaceGrid
Move Math.Spline.NurbsSurface to Math.NurbsSurface

This matches NURBS.hs
Generalize NurbsSurface to arbitrary VectorSpace and associated Scalar
Use GADT-style declaration to roll type constraints into NurbsSurface constructor
Revise tests for new NurbsSurface types

name the rest of the quickCheck cases
Move NurbsSurface tests to test/Tests
Add type signatures in NurbsSurface tests
Add QuickCheck properties for surfaceGrid

In particular, make sure that the grid is uniform
and the requested density
Add type signatures after NurbsSurface type generalization
Be more careful about the bounds of ctRange

If ctRange returns a value outside of the knot domain,
evalSurface will return Nothing.  So ctRange cannot be even
a tiny bit outside the domain.