Complete rewrite of bioenv algorithm

Much shorter and cleaner. The previous implementation had a bug where the environment variables weren't being scaled before calculating Euclidean distances. The results now match R's vegan::bioenv function.

Returns a pandas data frame for easy formatting of results that are very similar to what you get in R.

Still have a bunch of TODOs to fill out, more unit tests to add, performance testing, etc.