Return a JavaScript Promise from Model.fetch()

Add support for synchronously returning a Promise object from calls to Model.fetch(). The promise will be fulfilled by the underlying persistence storage mechanism whenever the data becomes available.