Use functions rather than tasks to compose build streams.

Since gulp is just built around vinyl streams, we can use the stream API
directly to compose multiple tasks together.

This new approach as the advantage of allowing us to stream built files
directly into a git commit (with the requisite buffering, of course)
rather than first assembling the files on disk and then reading them into
the git commit. As well as being conceptually cleaner, this allows us
to implement livereload snippets for the dev server without risk of them
ever ending up in our github pages commits, since the commit is always
produced fresh from the source and not from the possibly-contaminated
generated files.