OMERO.web tree speedup (develop)

`develop` version of #2483 and #2530

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.

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.