Move role definitions out of the model.

They are part of the network protocol, and this way we don't need access
to the actual model implementation on the client.
Expose custom roles of ToolModel to the client.
Add client side tool model and very crude integration of the object tree.

This is full of hacks, but it shows a path forward.