Create copy of scenario context before modifying

Currently ScenarioRunner.run actually modifies the context attribute of
the scenarion function, when that scenario is run. This could cause
differente behaviour on subsequent runs of a scenario. It also causes
problems in unit tests as sample data passed into run() gets applied to
the scenario function, which causes subsequent tests to fail.

This patch uses copy.deepcopy to take a copy of the scenario context
before modifying it.

Change-Id: I101ed35998d82f6dcf11e603b9b0cda97bf8dbb1
Closes-Bug: #1305783