Port latest batch of cukes from master to gh

:warning: This is my work in progress; some cukes still fail

/cc @jingweno
> In your SameAs function, you could use return reflect.DeepEqual(p, other).

That's alright; I think I want to keep my `SameAs` logic right now, as I only want to compare on `Name/Owner/Host`, but not on `Protocol`. (Protocols might be different in theory but we still might be describing the same project.)