Introduce pool allocator for scheduled efx

Before this commit, efx were scheduled to be played by dynamically
allocating memory every time, and then freed when the efx's life time had
ended. Introducing a pool allocator potentially removes the overhead of
many dynamic allocations per frame.

Further work needs to be done to remove dynamic allocations for the
effects themselves (see FX_AddLine, FX_AddBezier, etc. functions).