Rust: add first cut of Rust implementation

- mostly direct translation of C++ version
- save image data as ppm (RGB8)
- visually matches c++ version, only small rounding differences