feat: add intermediate `Model` and serialization updates
Big commit which has BREAKING CHANGES! This adds an intermediate struct called `Model` which has `serde` implementations. `Model`s can be saved and loaded and completely contain everything needed to make an `Evaluator` or `NLL` except for the `Dataset`.
To do this, `Amplitude`s need to be (de)serializable. This is a bit tricky, but the `typetag` crate does the trick and it isn't too much of a burden to throw `#[typetag::serde]` on `Amplitude` impls.