- guard rail tests for nonexistent lookups in manager classes
- custom exception for nonexistent Entity ID
- custom exception for nonexistent Component ID

- special Engine kinds (detector, modifier, spawner)

- maybe AddEngine should take a constructed engine similarly to AddComponent?

- component getters should return ValueTuple instead of KeyValuePair so we can do destructuring assignments

- docs