Calling dispose on an assets will now automatically unregister it.

This patch makes all assets that extend from AbstractAsset
automatically unregister themself at the asset manager when they get
disposed.

This prevents module developers from causing memory leaks
when they only call dispose on the asset.
Don't let GLSL materials and shaders dispose themselfs completly at reload.
Make AbstractAsset implement isDisposed() so that it works always properly.
Create new NullPreftabs to ensure that they are not disposed.
Don't load data for disposed assets, log an error if it is tried.
Make the onDispose and onReload methods protected as they should not be called.
Warn about dispose calls in onReload and fix an issue the warning discovered.
Simplified some AsssetManager code.
Ensure that assets only get disposed once.
Merge PR #1253 by @flo - asset system tweaks