implement support for custom shells
cleanup shell bootstrapping

- save a roundtrip
- ensure POSIX shell
- use timeout
- some documentation
Fixes #82
Thanks Ole for finding it and AM for insight! :)
Merge branch 'devel' into feature/tcsh
fix shell lifetime -- tests pass again
Merge branch 'fixes' into devel
add gc testing code