Create custom readonly accessor properties which store the last value of a given property. This way we don't have to continually invoke functions just to get the last value.
Allow the scale accessors to declare property accessors on the enclosing function. This gives us the ability to do things like this:

chart.x.key()

as well as

chart.x(function(x){
  x.key();
})