Use Rc<Cell> instead of passing `&mut irqs` all around.
The runtime impact is two additional size_t's per each holder of the
shared pointer.
Former-commit-id: afd3188c31608ebcf062256a7ad51575dbc90d8b
Former-commit-id: 22e0e01953968cee592b5408677e557059669c31