Added possibility of early exit to masterlist updating.

The parsing test also has its output recorded so that if there aren't
any issues, it doesn't need to be repeated later.
Issue #9: Plugin loading multithreading now checks file sizes.
Fixes to masterlist parser and generator.
Simplified handling of parsing errors during masterlist update.
Multithreaded masterlist updating & parsing.
Exceptions thrown during global message condition eval are now caught.

Also fixed global message conditions in v2 masterlists not being
converted.
Issue #39 work. Added some helper functions for computing plugin overlaps.
Issue #39. Changes to bring down overlap computation time.

Was roughly far too long, now around 3s.
Issue #39. Added function to get all a plugin's in-vertices.

Also implemented priority override of overlap-based edge direction.
Issue #39. Fixing some coding mistakes.
Issue #39. Gave function the wrong name.
Updated definition of plugin priority metadata field.
Added plugin sorting function that puts masters before non-masterrs.
Issue #39 work. Started to implement graph sort.

Also moved graph-related stuff into a new h/cpp file pair, and fixed the
boss::master_sort function. For some unknown reason, an exception gets
thrown after roughly 180 operations on the graph object, ie. near the
end of the out-edges addition for the first plugin in the list.
Issue #39. Reduced number of overlaps recorded that would get ignored later.

I'd also assumed that all plugins listed would exist, forgetting that
BOSS just adds error messages and doesn't fail at that stage, so added
checks for that. Also figured out why adding edges to the graph was
crashing: it doesn't seem to like connecting to the last vertex in the
graph. Haven't figured out where I'm going wrong beyond that though.
Issue #39. Added saving of the graph for visualisation purposes.

Still haven't figured out that crash bug.
Issue #39. Tidied up code a bit. Also fixed crashing issue.

I narrowed it down to adding edges for overlap plugins - this wouldn't
cause an immediate crash, but would result in one later. Changing the
graph containers from vectors to lists fixed this (I noted that the docs
say that the lists have better iterator/descriptor stability).
Unfortunately, lists require extra work for saving and sorting, since
there's stuff missing in the backend (which is stupid, IMHO, behaviour
shouldn't depend on template parameters...), so those have been
commented out for now.
Re-implemented sorting and graph output, and added a cycle check.
Issue #39. Fixed some edges not being drawn due to case-sensitivity.
Issue #39. If there's an error, it actually gets displayed to the user.