(QENG-431) expanded and improved role support in beaker - reapply

This re-applies the reverted role support for beaker.
I find this super confusing. We have a "sorter" here that can be either a identifier to filter hosts with, or a collection of hosts, and then we have a collection of hosts to filter, or a blank array... Wouldn't it make more sense to have a collection of hosts to run against, and then an optional identifier to filter the potential hosts? I think restructuring the inputs like that would remove at least conditional branch below.