Solution to #71

- add a keyword argument to PlotlyList.update() called immutable (with default =False)
- leave PlotlyDict.update() as is in master branch

`fig['data'].update(some_dict, immutable=True)` creates list of copies
of `some_dict` before calling PlotlyDict.update().

Thus, further updates in `fig['data']` can be applied trace-wise e.g.

`fig['data'][0].update(some_other_dict) only updates the first trace.
This just separates the functionality out so its clear for future readers (likely ourselves) to see exactly where the exception is expected and what the *normal* course of action is if it doesn't get thrown.