Script cache

Added Caching to scripts.
Using 2 "synchronized" vectors (where indexes from one match indexes from the other) is generally a bad practice, because it is very likely that eventually some programming error will lead to some desychronisation. Furthermore, it is not obviously evident to the reader that both lists are related. A list of pairs/tuples/objects is generally preferable, or, as I mentionned previously, a std::map