Deprecate Extension::isAvailable(), replace with Extension::available() and deprecate Extension::isWritableWithAsset(), replace with Extension::permission().

Signed-off-by: crynobone <crynobone@gmail.com>
Move safemode detection to it's own class.

Signed-off-by: crynobone <crynobone@gmail.com>
Add contracts.

Signed-off-by: crynobone <crynobone@gmail.com>