Lots of changes to main.py:

- Rework Input class to not be a dict - this changes the structure a bit, but doesn't mean less usability
- Also change dict(input) to input.__dict__ in plugins/log.py to be compatible with that change
- Change the complicated double-negative autohelp statement to one that makes more sense
- Add input type strings to all function documents
- Add a more complicated argument checker for plugin functions. Supports new and old format