Refactor and simplify guard code of circuit_send_next_onion_skin()

As part of prop271 (#19877 (moved)), we added about 70 fresh lines of code to circuit_send_next_onion_skin() which is an already convoluted function.

Ideally we should abstract this new circuit-related guard code and put it in its own functions, to reduce complexity of circuit_send_next_onion_skin() and maybe even make it unittestable.