Refine shadow inset.
Refine attendances dashboard. Show more data.
Add proper title.
Move submit button styling into general component.
Add Amazon s3 integration.
Add library to handle website publishing to s3.
Add website#sync endpoint for student website publishing.
Add UI for Website publishing.
remove uncaught unused code.
Change tabs and courseName back to immutable props.
Change state.loaded to state.status and use more explicit statuses.
Create AsyncLoader to abtract async loading strategy.

Rename 'content' to 'payload'.

The goal is to enable pragmatic execution of page states based on pure setState manipulation which subsequently enables pushState back/forward navigation.
When async is a function it should adhere to strict payload format.
Change tab array to dictionary to allow for named tabs.
Refactor updatePrimaryContent to reusable updatePayload on the common parent.
Change sub-tab array to dictionary to allow for named sub-tabs.