All Rust commits from Facepunch
Huge code cleanup Introduce two modes, simple or advanced snapping behaviours