SwapAtZ - Overall rework, simpler to understand, more features

Rewrote most of the plugin to support more features and make it easier
to understand.
- Support retraction between swapped layers
- Removed some assumptions that G0 codes are after layers.
- Removed G0 code before swapping
- Add SwapAtZ mark in resulting gcode where swap occur.
- Added support for print one at a time mode
- Added layer Z scaling to prevent floating or crashing swapped layer
(swapping with different layer heights).