refactors heinzel-template from eventemitter to promise