Decode all weights in GBufferGroup

Previously, there could be a variable number of weights. This introduced a
loop in the skinning code that profiling revealed to be a slow point.
Furthermore, the final weight was calculated each frame. Now, we store all
weights in the decoded buffer, even those that are zero and the calculated
weight.
Slightly better dest buf handling