[connectionagent] Rework service tracking

QConnectionAgent has both a hash map and an ordered list for keeping
track of services, and these need to be kept in sync for proper
operation. Since there isn't much benefit from the hash -- for the
most part, its keys are iterated and all related values accessed --
reworked the code so that there is only one container, an ordered list
that contains service paths and pointers to service objects.