Move more code to new currency classes

**Description** Move some more code to the new currency classes. I have refactored the currency classes a bit to solve some problems I was facing.
**Testing** Tests pass
This is a nit but I think it is important for me to get used to all this co-contra variance.
As this class is covariant in C, you can share the "empty" instance between all the possible currencies as `VolumeByPrice[Nothing]` is a proper subclass of all of them. I think that's the typing for `None`, `Option[Nothing]`.