components now return promises

Also grunt is no longer a hard dependancy, now any kind of generator can
be used