Create a Task interface and refactor JSONification

After this commit, what were previously called Tasks are now called
DefiniteTasks, because they have a definite due date. They implement the
new Task interface, which has methods that allowed it to be a largely
drop-in replacement for DefiniteTask. This means that, in the future,
other types of Tasks (see #17) can be added easily.

Additionally, I rewrote the in-file layout to use a different structure
that sorts different types of tasks apart from one another. This will
allow for cleaner storage once there are multiple types of tasks.
Moved DefiniteTask code to a task.go
Add eventual todos, which are a work-in-progress

They are added using the "eventual" command, the syntax of which is
simillar to definite todos, except it takes a duration, such as 8h,
rather than an exact date. This is used to calculate an urgency ("Nice")
value.

Eventual todos are very much a work-in-progress, and really need a
better relative time library to work better.

Ref #17
Modify the internals of eventual tasks

Now, eventual tasks use priorities similarly to definite tasks, and have
a constant time until due.

Ref #17
Improve the EventualTask string format

Ref #17
Refactor colorization and add eventual task colors
Throw error on missing priority argument
Add documentation for the "eventualLy" command

This should be the final change necessary for a mostly-working
"eventually" subsystem.
Version 0.3