We introduce `recursivelyUpdateRoles(ThreadTraversalNode)` which updates the thread corresponding to the `traversalNode` AND all children recursively to update `threadInfo.roles.permissions`.
NOTE: This function simply follows the `ThreadTraversalNode`s and the return value is meaningless. We're not mutating or updating the `ThreadTraversalNode`s, we're simply using them for traversal. We ARE, however, mutating the `threadInfo`s "directly" by mutating the `ThreadStoreThreadInfos` passed into `updateRolesAndPermissions`.
---
Depends on D7600