BGE: Cleaning up BL_ArmatureObject so it has direct control over its armature and pose. It now also copies armatures to avoid needing to swap poses around. This makes updating pose data more thread safe.
BGE: Using OpenMP to thread the pose updates. Helgrind still reports some errors that need to be fixed.
BGE: Removing unused code from BL_ArmatureObject and renaming BL_ArmatureObject::SetActiveAction() to UpdateTimestep().
BGE: Allowing the BL_SkinDeformer to be updated in a loop in KX_Scene::UpdateAnimations(). OpenMP is then used to thread that loop.
BGE: Moving mesh copy code from BL_SkinDeformer::Apply() to BL_SkinDeformer::UpdateInternal() so the code can be run in parallel.
BGE Cleanup: Replacing a switch in BL_SkinDeformer::UpdateInternal() with a simple if/else.
BGE: Have the BL_Action keep a copy of the action it needs to use to avoid threading problems.
BGE: Combining the two threaded loops now that helgrind no longer reports errors for either of them. This gives a slight performance boost.
Implementing an optimization to arrays of RNA values in the animation system,
which reduces the number of RNA lookups needed. For example, position has three
values (x, y, and z) that would previously do three RNA lookups, this can now
be done with one. In my benchmark, this cut RNA write times in half, resulting
in a 10~15% improvement to the overall frame time.
BGE: A hacky first attempt at hardware skinning.

Right now all armatures are forced to use hardware skinning (this will change
soon). Only 4 bones per vertex are supported (vertexes with more than four
bones are broken for now), and only 100 bones are supported. However, my
benchmark scene is about 3x faster with hardware skinning.
BGE Hardware Skinning: The four most influential weights are now copied over for vertexes with more than 4 bone weights.
BGE Hardware Skinning: Adding hardware skinning as a BGE GPU vertex deformer and renaming the BGE vertex deformer to BGE CPU.