Make it more apparent that attribute access should happen through #get and #set
Name things what they are
Check for function before running
Clean up triggering and setting events
Provide an optional context