Note: I am going to be completely rewriting this documentation, and what was here may have been invalid so stay tuned.