feat($state): controllers can now be specified dynamically

Closes #389