bugfixes/changes in sessions.py

tenk/sessions.py: fixed an issue with poor indentation/formatting
because of the way lxml handles whitespace using the remove_blank_text
option.
tenk/sessions.py: convert custom dates into a datetime.date object in
object initialization
tenk/sessions.py: fixed TypeError by using getroot(). parse() returns an
ElementTree rather than an Element, which caused a TypeError when the
program tried to append a new skill node.
tenk/sessions.py: when updating a session I had checked for the case where
there were no hours already logged, but not for the case
where there were hours logged but the user did not pass in any new
hours. This resulted in my program trying to add float() and Nonetype.
tenk/sessions.py: created serialize_and_save() method. mostly for
aesthetics. It seemed weird to type xml = session.generate_xml() and
then session.save(xml). It made more sense to encapsulate that with
session.serialize_and_save().
overhaul CLI

Major overhaul of CLI to use subparsers for a logical grouping of
commands and more sensible CLI commands.