Massive refactorings

Hey team Air: @Shuffguy, @BenBrostoff, @bsusensjackson, @ykirschner, @lexieernst.

I made some major changes to your code. Take a peek around and see what you can learn from the changes that I made.

If you follow the commit history, you should be able to get a sense of the incremental changes as they happen. Some commits are small, some are large.

As you are looking through this, ask yourself:

- Why is this an improvement over the previous code?
- How does this change affect the code base?
- Do I understand this code? (hint: if you don't understand it, do some studying. :)

I was working pretty fast on this code, so there may be bugs. Oops. Shouldn't be anything major.

Don't be afraid to tinker with this code. Pull down the branch, and you can play with it. Explore! That is what it's there for.

Have fun.
This requires necessary third-party libraries.