Sort struct dockeys

It looks like the logic is now incorrect. Consider that av.Field(ai) below will see something that is not af, and if ai == an below, the loop will leave without ever having looked at af, which means both the comparison is happening across unexpected fields, and that we're missing fields entirely. It's slightly worrying that we have no tests breaking.