Use OpenStruct instead of Struct

We monkeypatch OpenStruct to look like a Struct object. Eventually we
should go back and create a nice wrapper for structs so we can avoid
the performance hit of OpenStructs. This was done to avoid a problem
with marshaling classes that were created using structs (Marshal won't
dump anonymous structs).
In the object cache, use our own store