Collections with visibility

Produces SQL looking like:
``` SQL
  SELECT collections.* FROM collections
  
  INNER JOIN users_roles ON
    users_roles.user_id = 123
  
  INNER JOIN roles ON
    roles.id = users_roles.role_id AND
    roles.resource_type = 'Collection' AND
    roles.resource_id = collections.id
  
  WHERE
    (collections.visibility = 'private' AND roles.name IN ('collaborators')) OR
    (collections.visibility = 'foo' AND roles.name IN ('bar', 'baz'))
```