Change AttachedDataContainer implementation to something slightly smarter

The new container have a storage place and additional indexes. Role of
indexes is to map an item property into attached data storage. It should
be easy to add a new index. Currently the storage is implemented as
QVector, which is nice for iteration but it is virtually impossible to
remove an old data (it would cause index drop && create). For now we "leak"
removed attached data.

We need to store attached data for all items in the model, because
notifications would use hashing from an object id to row heavily.
Use notifications in EnginioModel.

The current implementation is the easy one. We ignore a notification
that comes from us. It increase latency, so it should be fixed in future.