Crowd Design -*- outline -*-

* Introduction
The Crowd layer builds upon the Presents layer through the addition of a
few key services. These services are based around the concept of bodies
and places. A client of the system is represented by a body and that body
can occupy a place. Bodies can communicate with one another through two
mechanisms: they can speak which broadcasts their message to all other
bodies that occupy the same place, or they can tell which delivers their
message specifically to one target body regardless of place.

Services are provided for switching from place to place as a body can only
occupy one place at a time (or no places at all). A framework is provided
for management of places on the server. Most applications will likely want
to specialize the place concept and extend it with functionality specific
to their needs.

* Components
Wherein the individual classes and components that make up the Crowd
framework are described.

** BodyObject
The body object extends the client object from the Presents framework and
tracks information like the current place occupied by the body.

** PlaceObject, PlaceManager
An instance of place object represents a particular place and tracks
information pertinent to that place, like what bodies currently occupy it.
Every place has an associated place manager which lives on the server and
coordinates services for that place. It can be extended to coordinate
services for place specializations.

** ChatService, ChatProvider, ChatReceiver
These three classes coordinate and manage communication between bodies.
