Huge refactor!

**Not ready to merge**

Hey Dun,

As I'm going through your code to figure out how to run it, I'm refactoring the code base to make it a little bit more user friendly. I'll be trying to keep the functionality more-or-less the same. As I make changes to my fork, they'll appear here and I'll try to finish it off completely by tomorrow. I'll let you know as soon as it's ready to merge.

So far, I've implemented a more efficient linear least squares method. My version does *a lot* less memory allocation so it should be quiet a bit faster but I haven't really benchmarked it. The only difference compared to your version is how the L2 norm is specified. You should now give an *array* of regularization strengths (with the right ones zeroed out in advance) because I've removed the `poly` argument.

Either way, push code to your repository regularly and lets stay in contact.

/cc @davidwhogg