Added methods for a switch to get replaced from external hardware application service if it fails.
Added a test to ensure that extended speculative objects worked in the
face of failures.  This test fails.  My suspicion is that the test
fails because when we replace a switch, we zero out its flow table to
be empty.  If the event that caused the failure was a removal, when it
retries, it tries to remove an entry from the flow table, which does
not exist and fails.  Still determining how to fix.
I believe that an issue with the RandomFailuresBackedSpeculationTest
is that when we replace a switch after it fails, the replacement
switch does not maintain the number of flow table entries it
previously had.  This commit allows the hardware state pusher to keep
track of whether change to switch failed while adding or while
removing element.  Then, hardware state pusher can replace an old
switch with a new switch that has the correct number of elements.
Should be replacing failed switches with switches that have the same
number of flow table entries as the previous switches did.  There
appears to still be some bug however.
Keeping track of whether last operation was an add or a remove.  That
way, replacement entry's flow table can match previous'.  Test case
still fails however.