chore(gulp): refactor tasks to ensure all files are copied

Previously, only 16 of the files from the 'templating' dependency were being copied.
I believe this is due to Gulp terminating before all the files had been written.

This refactoring ensures that all sub-tasks are complete before gulp exits - you do this by
returning the stream from the task.  This is tricky to do if you have multiple streams in a
single task so I dynamically create a new task for each dependency and then the main build
tasks depend upon the completion of these dynamic tasks.