Fixed switching tasks on tasks that exist already.

Prior to this, switching to a new task always went through the flow of
starting a new task. This meant that the sequence number written out
would be 0. That's problematic for a task that's being resumed with the
--switch/-s flag on the start command. To fix this, we now use a
temporary struct and a existence check against the sequence file for a
task. We're kind of doing our working twice here with reading and
hashing and the like. But until a refactor occurs this is working and
functional and start -s is memory leak free.
Finish Task functionality

Finishing a task is pretty simple. Read the task if you can, write it
out with a finished state and make sure to set the endTime accordingly.
Easy. _tc_task_read takes care of the rest. Displaying the view for the
task to the user is nice too, it's much better than saying something
like "your task has been finished" Of course it's been finished, you can
see that from the view saying Task Complete.

The code could be refactored into the tc-task.c file as finishing a task
belongs there since it's a state change for the task really. It might be
a good idea to allow the finish command to be like view, in that if you
pass no arguments it will finish off the current task.
Current task and finish checking

When finishing a task, if it's the current task. The current file needs
to be removed so a user can begin another task without having to use the
-s flag. It's important to store the current task BEFORE you write the
finished task out becuase the write command creates the current file for
the task. So if you do it after then you'll end up with the two task
names (current and working) being the same and you'll always remove the
current file which will cause finishing task foo and removing the
current file even if you're actual current task was task bar.