Add support for setting timeout to 0

Technically you can leave the timeout off entirely or set it to CAKE! and
it'll just count as 0.  But that is all ok.

Also adds a pile of integration tests.

Change-Id: I94926421f17420ba58c512ab78fa0f7ea998560a