Initial import

This is my first push of code to GitHub, made as a pull request for easier review
See my previous comment in the fetchAndCache() method. Right now, the Promise returned by fetchAndCache() will only reject if there's a network error preventing communication, not if there's an error response returned.