Refactor dirserv_add_descriptor so we always free routerinfos and send events
dirserv_add_descriptor tries to do too many things, and we tend to forget to free memory (#22370 (moved)), and send events (#22371 (moved), commit 77502ac in 0.2.0.1-alpha).
We should split the function into two:
- one that does the rejections and frees the descriptor at the end, and
- another that adds to the routerlist
And we should make sure (somehow) that we always call control_event_or_authdir_new_descriptor(), as it's easy to miss one of the cases.