<issue_start><issue_comment>Title:  fix(api): maintain speed state after collision recovery
username_0: ## overview

Fix a bug involving pushing/popping gantry speeds, causing one the the QC scripts to move very slowly after 1 cycle. This PR avoids the issue in the QC script by explicitly setting the speed there. But then also we address the underlying problem in the driver, which simply involved replacing any calls to `self.push_speed()` to be instead `self.push_axis_max_speed()`

The bug happens in the following scenario:
```python
try:
    driver.push_speed()  # save the current combined speed (400 mm/sec)
    driver.set_speed(10)  # set to a slower speed
    driver.move({'X': 430})  # hits the switch, forcing a home
except SmoothieError:
    driver.pop_speed()  # ERROR OCCURS HERE, b/c previously "pushed" speed was overwritten
    # the driver has now been set to the (unexpected) speed of 10 mm/sec
```
Here is the sequence of the events in the driver that cause this:

1. The X axis hits its limit switch, which...
2. forces an automatic home on the X, which...
3. then runs `driver._home_x()`, which...
4. then calls `driver.push_speed()` on whatever the current speed happens to be
5. in the example above, that means that the pushed speed is now 10mm/sec