Give State and IStateListener virtual destructors
Add Command and CommandQueue