Reduce stored user data

This only stores the attributes that are available through the public interface.
Optimize marshaling

- marshal_dump and marshal_load makes sure no unnecessary instance vars are
  marshalled
- don't cache the api for now because of a marshaling bug in 1.9.3
Add specs for User