Revert in part "Remove IL for struct writer and MessageWriter code instead"

This reverts partly commit 9089c25d192af057cb5f9b0b8a45e3b905ca6bb3
Reverts "Use a slightly more tuned path for reading structs"

This reverts commit  e8e13e1d7775046e3fb1f07460f54f592f888d2b