using real __set() and __get()

Elgg has always had this odd way of having __set() and __get() call set() and get(). This cleans that up and adds unit tests for the changes.