Safe dataset

dataset.data() now returns a copy of the reference to the underlying data instead of the direct reference so shallow-level data manipulation is not possible.

plot.removeDataset no longer takes in an array as an argument.  only a key

Closes #691