Engine: integer status, better streaming, lots of tests

* Jobs return an integer status instead of a string
* Status convention mimics unix process execution: 0=success, 1=generic error, 127="no such command"
* Stdout and Stderr support multiple thread-safe data receivers and ring buffer filtering
* Test streams and basic engine primitives. Coverage=55.7%