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
2 reasons:

1. It makes sense concetually, since a "Euro Market" is also a "Fiat Currency Market".
2. It helps with protobuf serialization, since the serialization for `Market[FiatCurrency]` can handle the serialization of all subclasses.