Added acceptance test for programming the PIT (and PIC for IRQs) to check IRQ0's ISR is fired correctly

- Needed to program the PIC in order for IRQs to work correctly
- Lowering the PIT counter 0's OUT pin is actually the trigger for raising the IRQ
- Removed IRQ-based tests for square wave generator mode as this should not be used with counter 0
Refactored timer handling to avoid handling CPU cycles outside the yield manager

- Waits for any pending ISRs to be handled during test runs by waiting for HLT
Added basic tests for "push" instruction
Added acceptance tests for "pusha" instruction

- Checks 16-bit operand-size mode and 16-bit stack address size
Updated acceptance tests for "push" and "pusha" instructions

- Both still only cover 16-bit stack address mode, but 16- and 32-bit operand-size modes
Updated TestSystem wrapper to always point CS:IP at the loaded machine code

- Subsequent .execute(...) calls were not working because the loaded code was not being pointed at
Added acceptance tests for "jmps" (short jump) instruction

- Tests jumping backwards and forwards (involves signed number handling for wraparound)
Added acceptance tests for "jmpf" (far jump) instruction