Too many simple changes to list them all. Most of them avoid duplicated calls or employ alternative ways of getting at identical information.
The biggest change is for read_attribute:
I found out that accessing fields of active record objects by name is relatively slow. This is mainly due to the fact that method_missing is called and most information, such as required coercions, is recomputed on each access using read_attribute("name"). Therefore I thought it would be a good idea to actually define the method on first access using read_attribute. To make this work, I needed to redefine the method id to not call read_attribute.
I did not touch serializable attributes, as it looked somewhat complicated. I think write_attribute could be improved along the same lines.
This patch depends on http://dev.rubyonrails.org/ticket/1228