This also splits the project into 3 crates, which are _theoretically_ indepently useful, though the target audience will be very small...