Moved environment setup to its own function
Formalised data types in sqlite database
Added track modification times to track metadata
Store directory tree modified times in database
Made paymp only create database tables if necessary...

and not drop existing ones. However, WARNING!, we don't do anything smart yet
to update the database only when required, we just keep adding tracks to it
every run, so don't use this commit in production!
Made SqlSchema class to encapsulate some things about dealing with sqlite...

Hopefully this has seperated out library business logic from SQL implementation
logic a little. We now check timestamps on directories and only update the
library if we need to :-)
Got all meta...

Reading the sqlite3 documentation, there was some interesting stuff about
how one can register classes as adapters/converters to and from SQL tables
(basically, the exact thing I was trying to solve nastily with lots of
string processing).

I implemented a class for TrackMetadata, but then decided that it would be
good to generalise it a) for practice and b) so that I could use it for
Dir. In doing so, I wanted to use an abstract base class, because they're
cool, which started me down the road of metaclasses.

In addition to providing the ABC functionality, my custom metaclass
registers each newly defined class with sqlite as a converter, and does
some munging of __slots__ to make them work, to save the class author having
to get either thing right.

I'm still not sure I like metaclasses, but this was VERY good practice, and
we're not planning to expose these classes to others, so we shouldn't run
the risk of confusing everyone!
More epic fiddling...

Basically I think I'm trying to write my own simple ORM here, but it's an
interesting design experiment not to use an off-the-shelf one, so pressing
on.

This commit actually restores working functionlity!
Merge branch 'library'

Made music library only update when necessary, and tried to make some nice
abstractions to sit on top of the actual SQLite database.