scheduler: don't rely on boost interrupt on shutdown
Summary:
Calling interrupt_all() will immediately stop the scheduler, so it's
safe to invoke stop() beforehand, and this removes the reliance on boost
to interrupt serviceQueue().
This is a partial abckport of Core PR18234 : https://github.com/bitcoin/bitcoin/pull/18234/commits/306f71b4eb4a0fd8e64f47dc008bc235b80b13d9
Test Plan:
ninja all check-all
Reviewers: #bitcoin_abc, Fabien
Reviewed By: #bitcoin_abc, Fabien
Differential Revision: https://reviews.bitcoinabc.org/D6531