[Items] [Contracts] Item Requirements

- Implemented the concrete requirements classes.
-- Added contracts to back them up.
-- Not totally happy about how the app layer makes a new requirements instance every time we ask for it, but I need to change how this work when I can make enchantments affect item requirements.
- Modified all of the interfaces that had an intermediate Readonly version... The base case is always the readonly version, so by removing this middle-man, I'm able to directly return a mutable version and the caller gets the readonly interface by default.