TODO:
- rename peek/poke
- remove the costly test on valid instruction in run()
- use array for i/o instead of input and output.
Then merge prg_{add,get}_{input,output}
- add a pipe function to move one program output to (another) input
- remember in next AoC to use _unused to keep interesting unused functions