Fix performance of Server List with Neutron for Admins

https://review.openstack.org/#/c/30048/ optimized the
SecurityGroupsOutputController for the case where the server
list only contains one server, but in all other cases the current
code calls the Neutron driver in a way that makes it retrieve
all ports and security groups visible to the tenant.

For users with a Neutron admin role this retrieves all ports
and SecGroups in the system, which on a large system is a
major performance issue and often leads to client timeouts.
Normally these users have further qualified their query to a
specific tenant or host, or maybe just trying to get their own
list of servers.

This change introduces a number of further optimizations
which address these cases.

1) If there a specific tenant is specified in the search options
of the request the Neutron queries are limited to this tenant

2) If all-tenants is not specified in the search options of the
request the Neutron queries are limited to the tenant making
the request.  This prevents a user with a Neutron admin role
from triggering an inadvertent query of all ports and
Sec Groups.

3) If a specific host is specified in the search options the
Sec Groups of each server are queried individually.  On
anything apart from a very small system this is more
efficient that getting all ports and Sec Groups and filtering
to the specific servers.

In addition when getting the Sec Groups of a specific server
the tenant_id is explicitly passed to the Neutron Driver so that
and the query scoped to that tenant.  As above this prevents a
user with a Neutron admin role from triggering an inadvertent
query of all ports and Sec Groups.

Fixes Bug: 1228384

Change-Id: I6f72533056e4f336f7578cc883fd1a125c2048a9