Place a packet after a given packet in a list. The list locks are taken and this function is atomic with respect to other list locked calls
Works even without knowing the list it is sitting on, which can be handy at times. It also means that THE LIST MUST EXIST when you unlink. Thus a list must have its contents unlinked before it is destroyed.