Feature : requires key

This pull request adds support for the `requires` key in the metadata. Here are precise specifications:
* value can be a string or an array. If it is a string, it will be considered as a array with a single element.
* Application can now require other application. This has two implications :
  * When the user installs an application, the core will try to install all required applications. If some of these applications don't exist, installation is judged impossible.
  * It is impossible to uninstall an application if other application requires it.
* If the `requires` key is not defined but the `extend` key is, the core considers that the application requires the one it is extending.
* The application manager interface has been improved to manage this require key