"Setup" function for extensions

This function, if present, runs once when an extension is initialized and allows async operations as long as a promise is returned. This allows extensions to run an async operation as part of the setup.

Closes #434