Add ordering to the project build set.
The ordering is provided by adding another list, m_orderingCache, to the
model. It is stored per-session and contains all elements that were
added to the model (even from unloaded projects). An element is removed
from the ordering cache when and only when user removes it from the
model by hand.
So, when an element is added into the model, it is firstly looked up in
the ordering cache to determine its position; if it's not found there,
it is appended to both the model and the cache.