switched to event-based board rendering

instead of initializing the board in its entirety, we're now doing so
incrementally as each project (along with its tasks) is loaded