More dynamic chart dimensions

Charts have a `ChartDimensions` structure for separating how the chart's dimensions are calculated from the actual rendering (avoids littering the view with dimension calculations).

At the moment, we recompute all the charts properties when we do a `ChartDimensions.prototype.set`. This will complicate things when we have charts that need their dimensions calculated differently (like pie charts). The plan is to change dimension properties to be computed when accessed, instead of trying to recompute all the properties at once whenever we do a set.