Return `NotImplemented` for invalid comparisons

When attempting to compare an instance of one of my classes with
something that doesn't have the same properties at all, rather than
returning `False`, return `NotImplemented` to allow the other object to
attempt the comparison.
Remove redundant `__ne__` methods

There's no need to define `__ne__` when `__eq__` is defined unless the
two are not opposite; Python appears to be able to work out `x != y` by
performing `not x == y` if it needs to, so remove the redundant code.
Create a mixin for things with an ID

A lot of HabitRPG API responses define objects that have an ID and are
associated with a particular user.  Create a mixin class to use for Task
and Tag objects and hold the common code.

The new `UserPlusIDMixin` defines the following methods:
- `__init__`
- `__eq__`
- `__hash__`
- `__repr__` (although subclasses only use this version when they have
  no more useful information to impart)
- `create_from_api_response` (which relies on subclasses creating a
  `populate_from_api_response` method)
Create and use a class for checklist items

The CheckItem class allows tasks with checklists to parse the checklist
in a slightly more intuitive list than just the parsed JSON API
response.
Add creating/updating tasks with checklists

When creating or updating a Todo or Daily, the corresponding `new` and
`update` methods now have a `checklist` argument which takes an iterable
of tuples specifying the checklist items and whether they should be
initialized as completed or not.

There's no obvious way to create the list using CheckItem objects; it
might have made sense to have a new object for about-to-be-created
checklist items, but that seemed overkill when a simple tuple would
suffice.
Handle API responses with check items missing IDs

When the API returns a response for a new task that has checklist items,
it apparently doesn't include the IDs of those checklist items.  For
classes using the ChecklistTaskMixin, override the
`create_from_api_response` method to re-fetch a task if it has checklist
items that don't have IDs, since explicitly GETting the task appears to
be sufficient to get the checklist item IDs.
Add checklists to recurring tasks

Add a 'checklist' entry to the YAML for recurring tasks, create the
entry when creating a new task, and use the entry to create uncompleted
checklist items when creating a new instance of a recurring task.