Added screenshot caching and some synchronicity logic, which is needed with the switch to the async library from ES6 Promises. Closes #6