Mention optimization of CTA diffuse map computation by using a cache.
Assure unique model names.

The set(), append(), insert(), and extend() methods now verify that the added models have unique names, i.e. that the name of a model that is added does not exist already in the model container. In that way, all models in a model container *should* have unique names.

Note, however, that a client can still violate this rule by retrieving a pointer to a model and by changing the name of the model explicitly.
Add tests to verify that GModels now refuses adding of models with already existing names.
Declare index access operators as inline, rename hasmodel() to contains() and add Doxygen documentation for class with examples.

The index access operators [] have now be placed inline so that faster code can be generated (as the index operator does not index checking it is now pretty short code).

The hasmodel() methods should semantically be named contains() (in general, a container should always have the contains() method to check for names).

The Doxygen documentation of the class has been enhanced, adding usage example to the general description.
Replace GModels::hasmodel() calls by GModels::contains() calls.
Correct Doxygen documentation.
Add unique observations for container.
Build observation identifier from filename and extension number of name in load() methods.

As an observation container needs a unique observation identifier we build now the default identifier from the filename and the extension number.
Add contains() and at() methods, declare some methods inline, and control uniqueness of observation identifiers for a given instrument.

The contains() method has been added that checks whether an observation for a given instrument and a given identifier exists.

The operator [] does not check the index range anymore (the operators are now declared inline). For index check, the at() methods have been added.

Methods that were implemented in the header file are now declared inline.

The set(), append(), insert() and extend() methods now verify that the observation that should be added has an identifier that does not yet exist for the same instrument in the container. In other words, observation identifiers need to be unique for a given instrument.
Tests now use unique observation identifiers.
Observation identifier is sufficient for defining a unique observation.