OMERO.web tree speedup

This pull request contains work on significantly (20x in most cases) speeding up tree loading in OMERO.web. Unit and integration tests for the `omeroweb.webclient.tree` marshalling functions are included.

The unit tests can be run:

```
components/tools/OmeroWeb $ ICE_CONFIG=path/to/ice.config ./setup.py test -v -s test/unit/test_tree.py
```

... as can the integration tests:

```
components/tools/OmeroWeb $ ICE_CONFIG=path/to/ice.config ./setup.py test -v -s test/integration/test_tree.py
```

There are also some extensions to projection logic by @joshmoore and these also have accompanying integration tests.

Work will follow that also removes the requirement to load identifiers via `listContainerHierarchy`. No changes to any tree functionality should be present. Significant effort was made to make as few changes to existing code and OMERO.web templates as possible.