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

This re-applies the reverted role support for beaker.
This doesn't have anything to do with the functionality of `DSL::Helpers#on`. It has to do with the complexity of `run_block_on`.

I think that moving the call signature to:
```ruby
  def run_block_on hosts, filter = nil, &block
```
Then the logic could become:
```ruby
def run_block_on hosts, filter = nil, &block
  hosts = Array(hosts)
  if filter
      hosts = hosts_with_role(hosts, filter) || hosts_with_name(hosts, filter)
  end

  result = nil
  if hosts.is_a? Array
      result = hosts.map do |host|
          run_block_on host, &block
      end
  else
      result = yield hosts
  end
  return result
end
```

This of course makes the `DSL::Patterns#block_on` more complicated. But at this point that method isn't actually doing anything, and it seems like translating the usage of `DSL::Helpers#on` would give that method a clearer purpose, as well simplifying the purpose of this method.