Split up project into multiple crates and use a Cargo workspace.
See README in root directory for more information.