Move given/when blocks to multi subs

Five indent levels is a bit much for code that's expected to grow in
size, and is some small ways already has.