Use a bounded semaphore for properly limiting the max count of items in the queue, also track removed items upon send_queue.clear
Added command processing phase "sending" which replaces former phase "sent", which in turn was moved _after_ the command has actually been sent

This solves a deadlock which can occur if a blocking command is denied sending due to buffer restrictions. It couldn't then ever be actually sent after denied once.
This should hopefully get cancelling to react a bit snappier again

TODO: figure out why sometimes writetimeouts show up