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
Unfortunately you cannot instantiate a `Market[Nothing]`, so it is also impossible to have an `OrderSet[Nothing]`. But yeah, your reasoning about the type is correct.`OrderSet[Nothing]` could represent an empty order set of any currency if it could be instantiated.