Breaking Changes:
- reworked how context messages are created/handled. Now all messages are created with `add_context`, which returns an `id` to that message
- message and context messages are now `Message` and `ContextMessage` classes, rather than plain dictionaries
- timed messages can be created by setting the `lifetime` argument when creating a context message
- messages can be deleted with the `clear_context` function
- renamed loop controller values to be more clear:
- `STOP` -> `STOP_SUCCESS`
- `ERROR` -> `STOP_FATAL`
Non-breaking changes
- created dedicated functions for determining which type of tool a given object is (i.e. one of func tool, method tool, class tool, class tool instance)