I can't understand some openGL syntax, however the effect you describe (objects being skewed) comes from the fact that the axes in the final model/world matrix are not exactly unit vectors. Try normalizing all axes before plugging them in matrices, even those that should obviously be unit vectors. (e.g. cross products of already normalized vectors) Even do it each frame, for each object, if you have to...
Another thing I noticed (2nd snippet) is that, you use an un-initialized matrix to multiply by the current one... this will be catastrophic in the release build.
Furthermore, you don't even set the major diagonal to "1"s. This way, you don't "pass" the translation into the matrix, you just set its first three columns to zero.
I don't think I see any other potential problems, but as I said I can only make assumptions about the openGL syntax...
edit:
Quote:This way, you don't "pass" the translation into the matrix, you just set its first three columns to zero.
Ignore this. This is the case with DX multiplication. Still, though, you won't get the desired result