Major module interface rewrite

- Split the `HabitRPG` class into two classes, one (`HabitRPG`) to
  handle the connection to the API, another (`User`) to handle
  user-specific information.
- Move API calls that require login details to the new User class.
- Instantiate tasks based solely off the task ID, rather than all the
  possible information in the task.
- Add a `fetch` method to tasks to get/update the task data from the
  API.
- Add new mixins for the different subtypes.
- Use cooperative multiple inheritance for calling through multiple
  mixins.
- Refer to the task `title` rather than `text`, which is less intuitive
  for people used to the HabitRPG API, but hopefully more intuitive for
  people used to the public interfaces.
Use list comprehensions rather than `list(map())`
Only iterate over the task list once.

This should (a) be quicker and (b) mean that if the task list is ever
replaced with an iterable rather than a list, it will still work.
Store whether a task object has been populated

When a task object is first created, it only has details of the
associated user and the task ID.  Store whether the rest of the task
data has also been added.
Add additional object model information

Add `__repr__`, `__hash__`, `__eq__` and `__ne__` methods to objects
where it makes sense to do so.