Add an asset loading class, ludum.Loader.

This class does asynchronous loading of assets. Currently it only supports text
assets (with an optional post-processing step which you can use to parse the
text into something more useful).

It supports grouping of assets and you can provide a post-processing callback
to run when all assets in the group have finished loading. The use case for
this was linking GLSL shaders when both the vertex and fragment shaders have
been loaded & compiled. Note that assets cannot belong to more than one group
(for now, at least).

Progress is reported based only on the number of assets which have finished
loading, rather than the number of bytes loaded, so it's pretty coarse grained.