Refactor IAccessor so it takes in metadata

This winds up being a little complicated, in many cases where we use the
accessor we are passing it into D3 so it will just take a datum and index.

To accomodate these cases, we wrap the accessor in a closure that contains
the metadata prior to passing it into the D3 code.

Wound up splitting the .data call into three calls, .data, .metadata, .dataset.
Setting metadata has some performance implications, as discussed in internal comments.
Same flags will get used for setting accessors too (when I implement setters).