SharedData::hasChanges()

This is a convenience improvement to SharedData. The hasChanges() flag can be set for a buffer with SharedData::touch() (which should only be called by the writing thread) and unset again with SharedData::untouch() (which should only be called by the reading thread).

With this, systems can easily skip components that haven't been changed since the last update.