Preload render mode shaders & convert callbacks to promises

By preloading the remote shader resources for render modes when the style sheet is initially loaded and parsed, we can make the mode initialization and recompilation process synchronous instead of async. This simplifies some code and avoids some complex async/throttling checks.

This branch also converts most (all?) remaining callback-oriented APIs to use Promises instead.