[Refactor] Interfaces Immutable/Mutable, Classes => Mutable

- The last commit left a bad taste in my mouth with how I had to wrap my requirements instance with another instance... Why?! Why can't I just have a base interface that is immutable and a child interface that redefines some things with setters? Oh wait... I can.
- Trying to go through all of the code and adopt this pattern:
-- Make an immutable interface
-- Make a mutable interface that inherits it
-- Make all class implementations be the mutable version
-- Whenever someone needs a immutable version, cast to the immutable interface