test: Turn ConnFixture into reusable TestConn

Instead of an embeddable fixture, provide a reusable wrapper over
pythia.Conn.
Explicitely set type of constants

Go does not automagically reuse the type of the first defined constant.
Hence, most of the status constants and message types were simple
strings.
Refactor Job tests

- Extract Expect and Watchdog functions to util_test.go as they may be
  useful for other tests as well.
- Do not trim spaces on job output.
- Always check output size limit.
backend/job: Implement Abort operation

The Job.Abort method immediately interrupts the job execution and sets
the result status to "abort".

As a side effect, we now always send SIGKILL to the UML process group,
even when the job has finished normally. This ensures no zombie
processes are left running.
Add bug notice for pythia.Conn
backend/job: Avoid race condition in kill()

Because kill() does not block when sending the kill request, the request
will be silently ignored if the watch() goroutine is not ready yet. To
avoid this, we use a buffered channel. However, this channel has to be
created before the Execute() call. Hence, we introduce the NewJob()
function to initialize a job.
Add Shutdown mechanism to components