This commit adds an internal scales object to the internal chart properties object. The scales object itself has a number of sub objects, one for each scale respectively. By default charts do not have to assign scales, but if they do not two default scales are created an ordinal x scale and a linear y scale.
Updates to the documentation around baseChart and remove some of the duplication around accessor assignment, so that the chart, feature and scale objects all use the same accessor generation function.
Adding tests around accessor assignment to ensure they are wired up correctly.
Reverse the parameter order for baseChart since config can be optional but the builder is required.
Writing a failing test which shows the need to introspect on an axis accessor for internal properties about the scale.
Wiring up the chart accessors.
Use `link` instead of `configure` to make the function more clear. Configure makes it sound like the builder processes before the chart has been defined, and yet it actually happens very late in the build process. The word link is used in the scale definitions as well, and therefore should begin to standardize the nomenclature used throughout the project.
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();
})
Rename the scales object to axes since a scale is a facet of the axis. This way when we refer to the chart's scale it will be consistent with how d3 refers to it as well.
Ensure that simply calling the accessor function does not reset the accessor property cache.
ensure we can set as well as get nested accessors.
Refactoring the way the key accessors work. I am getting rid of the hard coded xKey, yKey etc. in favor of nested accessors on the various axis objects. so you can do x().key('x') or x.$key // key
Additional rework on the code to move out the remaining references to the various (n)Key variables.
Removing the if statements around the builders for now.
Create a transparent function proxy between an individual axis object and d3's scale function. This way we can continue to chain functions as needed.
Working on the scale accessor issues.
Begin work on a function to rebind the scale each time a new one is assigned since each scale will have its own available methods.
Adding notes about the custom scale accessor that needs to be written.
Create a custom setter for the scale accessor for a given axis object of the chart. When the scale is set it will recreate the axis object so that we ensure that the transparent proxy functions between d4 and and the d3 scale object remain intact.