PULL

Finally committing this, and in the process of cleaning it all up. Unfortunately it's a little bit messy...I wouldn't exactly fault you for adding this to a separate branch or something, but I thought that perhaps you would have some ideas on how to clean it up, or better organize the source.

It works 100% with any test cases I've tried, and is fully backwards-compatible with the things you already developed. I'm not sure how it works with the interpolate and upsample features, because I haven't used those at all.

I would also like to really work on the NArrayX extensions, maybe even as a separate library, and develop clean and fast ways of iterating and finding combinations over multiple dimensions.

Okay let me know what you think, and how this can be made more succinct.

-Andrew