Lots of cleanups, and return T: Float from noise functions

Bah. Really makes me miss C++ templates. So much more flexible than generics, where you have to explicitly specify each capability of the type... And some capabilities (like `as f32`) can't be specified.

Oh well. If that can't be fixed, I guess I have no further complaints, and I'll merge the PR.