Rewrite render() to support asynchronous returns

The render() method will now be able to accept promises back from the
methods to retrieve the data object and to retrieve the template
rendering function.
_getData methods now asynchronous

This mainly rewrites the main _getData() method to return a promise
resolve or reject it through that interface, but also changes the
existing _getDataFromFile to throw an error rather than writing out to
the console if the file is not of an acceptable format.
Introduce intermediate _getRenderFn() method

This new method will serve as a go-between just like _getData()
currently does, and will provide validation and routing for the template
lookup.
Only display stack trace with --verbose

These are quite lengthy and do not serve a purpose unless you are
debugging the plug-in code itself.
Check for empty strings

Verifies that neither template nor data is given as an empty string.
Implement remote template URLs

This also brings in a new module: request.
Remote data support

This adds the js-yaml package, which is the same one used by Grunt for
loading YAML data natively from the file system.