Add spatial location to the agents

Agents should have an optional location attribute. This can enable moving agents or it can make agents communicate only with nearby agents.