major refactor of rclcpp to support executors
WIP changes to support multithreaded executor and timers
remove vestigial SingleThreadedExecutor header
add access control to groups using atomic_bool
refactor of executors for mutually exclusive cb's
added convenience debugging macro
modify factories in node to use groups

also check to make sure given groups are in node
modify rates to allow ctrl-c to interrupt sleep
added global rclcpp::sleep_for function

It differs from this_thread::sleep_for because
it will exit on SIGINT (ctrl-c).
refactor timers to use rates
spelling
STE: remove vestigial overlaid storage for nodes
MTE: store number of threads and provide accessor
executor: make destructor virtual
add some TODO's in the code to track known issues
executor: correctly mark some functions virtual
executors: refactor spin_node_some

This allowed me to unify populate_all_handles and
populate_all_handles_with_node into a single
function wait_for_work. This means that
spin_node_some now adds, then removes a node
to the executor for calling wait_for_work. That
implies I also added the remove_node function and
while I was at it I put some more robust checking
and wait interruption into add_node.
add sigint singal handler chaining, err checking
fix compiler warning
changed signal handling to consider sigaction

Specifically we must always use sa_sigaction and
then when chaining to the original signal handler
we must determine if it is a sa_sigaction or a
sa_handler type function and call it accordingly.