Use ObjectPool for the component pools.

There isn't (yet) any reason for them to be DynamicPools. Might be
reverted in the future if it turns out using DynamicPools enables better
runtime reflection.
Add helper function to create and add a component