Note: I've rebased this branch to remove a bunch of accidental whitespace changes (it made the diff significantly bigger), so it says the three main commits were all done today. That's a lie.
Note: I've rebased this branch to remove a bunch of accidental whitespace changes (it made the diff significantly bigger), so it says the three main commits were all done today. That's a lie.