`endpoint permission list` is way slower than expected
```
$ time globus endpoint permission list ...
...
globus endpoint permission list ...  24.63s user 1.49s system 16% cpu 2:38.88 total
```

The webapp can fetch ACLs on this same endpoint in ~1 second, so we know that the API is not responding slowly.
We suspect that either the CLI or SDK is doing something very foolish -- e.g. fetching the result multiple times.

We need to do some basic profiling and find the bug.
diff --git a/globus_cli/commands/endpoint/permission/list.py b/globus_cli/commands/endpoint/permission/list.py
index b3f513f..d435f69 100644
--- a/globus_cli/commands/endpoint/permission/list.py
+++ b/globus_cli/commands/endpoint/permission/list.py
@@ -2,9 +2,36 @@ import click
 
 from globus_cli.parsing import common_options, endpoint_id_arg
 from globus_cli.safeio import formatted_print
-from globus_cli.services.auth import lookup_identity_name
+from globus_cli.helpers import outformat_is_text
+from globus_cli.services.auth import get_auth_client
 from globus_cli.services.transfer import get_client
 
+_id_batch_size = 100
+
+
+def _resolve_identities(rules):
+    """
+    Batch resolve identities to usernames.
+    Used only for text-output to get a nice listing.
+
+    Returns a dict mapping IDs to usernames.
+    """
+    to_resolve = set()
+    for rule in rules:
+        if rule['principal_type'] == 'identity':
+            to_resolve.add(rule['principal'])
+    to_resolve = list(to_resolve)
+
+    ac = get_auth_client()
+    resolved_map = {}
+    for i in range(0, len(to_resolve), _id_batch_size):
+        chunk = to_resolve[i:i+_id_batch_size]
+        resolved_result = ac.get_identities(ids=chunk)
+        for x in resolved_result['identities']:
+            resolved_map[x['id']] = x['username']
+
+    return resolved_map
+
 
 @click.command('list', help='List of permissions on an endpoint')
 @common_options
@@ -17,10 +44,14 @@ def list_command(endpoint_id):
 
     rules = client.endpoint_acl_list(endpoint_id)
 
+    resolved_map = {}
+    if outformat_is_text():
+        resolved_map = _resolve_identities(rules)
+
     def principal_str(rule):
         principal = rule['principal']
         if rule['principal_type'] == 'identity':
-            username = lookup_identity_name(principal)
+            username = resolved_map.get(rule['principal'])
 
             return username or principal
         elif rule['principal_type'] == 'group':
['globus_cli/commands/endpoint/permission/list.py']