* Adds the ability to check how many children a primitive has, and should have.
* Adds Primitive.GetChildren which returns all known children of a primitive.
* Known Gotcha: ChildCount will count the self as well.
* If ChildCount != Primitive.GetChildren(...).Count()+1 -- then the linkset is incomplete, and you may want to do a properties request on it to get sent the missing children.
* Clear cached name, groupName in Avatar when an ObjectUpdate has new NameValues.
* Some message paths didn't maintain group title, while others did. (Although I don't think that affects this implementation.)
* In the proxy, do send an avatar update for group title changing to empty string.
* ActivateGroup and RequestAgentDataUpdate commands from UI to app to proxy to sim.
* Message back to UI OnAgentDataUpdate, so that we can tell whether a given group of this agent is already active.
* Adds some functions to check if a message is a normal agent message, or a group message.
* Adds new RelativePositionEstimate to complement RelativePosition - RelativePosition actually ends up drifting badly. RelativePositionEstimate instead calculates each time it is requested, using known velocity, and is far more accurate in practice.
* Adds an override to ChatEventArgs.ToString to dump information about the chat.
* Improves reliability of Group Messages
* Teleports previously used GetGridRegion which is sometimes unreliable, request the full map, once, if it fails. The results will be cached.
* Adds AgentManager.LastPositionUpdate to tell you when the avatars position was last updated
* EventQueue be checked periodically to make sure it's running. Sometimes it dies. This is a blunt fix (along with the previous commit), but is needed to ensure that event queue-y things keep working.
* Adds a 500ms sleep between connecting to a simulator and CompleteAgentMovement - there's a race condition within the simulator which sometimes results in a faulty login, this seems to help.
* SetSeedCaps has an extra parameter, if the user's simulator hasn't changed, don't do anything.
* Add a lookup which lets you turn full Object UUIDs into LocalID, while LibreMetaverse prefers localID when referencing primitives, the official viewer uses UUIDs - and several things actually work better this way. (For example, avatars can spontaneously change LocalID sometimes). This way we can follow those changes.
* I'm not a big fan of this code to be perfectly honest. It probably can be fixed better. There's possibly an error on the simulator side, or in this code, that I haven't managed to locate, when the EventQueue has an early return rather than long-polling as it should, and it's triggered by this code. Not sure if the official viewer suffers the same fault (possibly.)
* DEFAULT_AGENT_UPDATE_INTERVAL is now configurable
* INTERPOLATION_INTERVAL is now configurable
* You can now disable periodic SEND_AGENT_UPDATES independently (SEND_AGENT_UPDATES_REGULARLY) of normal updates, such as in CompleteAgentMovement
* You can disable TexturePipeline if you don't need it
* Fixes a possible timing bug in AgentManagerMovement.TurnToward
* GridManager requests now properly handle case sensitivity (i.e. all region lookups should be case invariant)
* Adds bidirectional lookups to GridManager allowing handle lookups as well as name. Caches.
* Adds a .Valid property to TextureEntryFace - sometimes it is not, and will throw exceptions if you actually try use anything in this class. At least have the ability to check first.