refactor: use single timeout for widget initialization

Update widget initialization to now use a single timeout
- Use same event cycle for all widget's that were initialized from the previous digest cycle
- Leverages the fact that $timeout returns a promise.
- Instead of causing angular to $digest for every single widget, it should only need to digest once per set of widgets.

This also may help with the FOUJUI problem (Issue #18), by making it one cycle to initialize everything then hand off to the browser.