Add sanity checks to ConcurrentWriterBag

Essentially, we want to verify that the contract on the class
is not broken -- that is, no write should occur while a read is
being performed.
Change to Parallel.ForEach for threading
Try to notify of a ReaddedDataException faster
Make EntityManagerMetadata thread-safe
Make Bag and SparseArray sealed
Also overload ==
Make ConcurrentWriterBag implement IDisposable
BaseSystem.GlobalEntity doesn't need internal
Improve documentation
Simplify the ConcurrentWriterBag API
Introduce execution groups

Execution groups allow Forge to understand execution order
dependencies between different systems. Sometimes two systems are
tied together and cannot actually be executed concurrently;
execution groups enable this scenario.
Merge branch 'master' of https://github.com/jacobdufault/forge