Menu system cleanup.

- Various changes to avoid parameter ambiguity and to make the code more maintainable.
- Only one constructor, uses separate functions depending on mode.
- Modification functions are chainable.
- Images passed as shared_ptr to avoid extra copies.
- Fixed comments.