[WIP] New asset management

Fixes https://github.com/yiisoft/yii2/issues/4454 

## Problems being addressed

Most css/js libs are not registered as Composer packages. As a result, if an extension has dependency on them, it becomes very troublesome to install the extension. As an example, the `yii2-jui` extension is including the whole JUI lib because there is no JUI composer package. And because of this, it is possible that two extensions are using different ways to reference the same 3rd party js lib and thus cause double inclusion of the same js file.

## Current status

Basic app (including debugger and gii) can work running the following composer commands:

```
composer global require "fxp/composer-asset-plugin:1.0.*@dev"
composer update
```

## Tasks to be done

- [ ] support automatic bower/npm package installation when using composer to install an extension. This is the main blocking task currently. We plan to solve this with [composer-asset-plugin](https://github.com/francoispluchino/composer-asset-plugin/).
- [ ] enhance `asset` command to support asset bundle listing and asset combining/compression via grunt and other tools (may postpone this task to 2.0.1)
- [ ] fix unit tests for asset bundles and asset manager
- [ ] fix acceptance/functional tests for apps
- [ ] documentation

## Summary of changes

1. Introduced `@bower` and `@npm` aliases to refer to the directories that should be used to install bower and npm packages, respectively.
2. Removed 3rd party js libs (e.g. jquery ui, punycode) from the core codebase and rely on bower dependencies to install them when needed.
3. Standardized the way of organizing assets, as described below.

### Assets specific to application

Put the assets under a Web folder, and declare them in one or multiple asset bundle classes. For an example, see https://github.com/yiisoft/yii2/blob/new-asset/apps/basic/assets/AppAsset.php

### Assets for non-redistributable widgets/modules

Put the assets under either a Web folder or the directory containing the widget/module class file. If the latter, make sure you specify `AssetBundle::sourcePath` so that the assets can be published when being used.

### Assets for extensions

Put the assets in a directory (e.g. `assets`) under the extension base path. List them in a bundle class and make sure you set `AssetBundle::sourcePath` to be `@vendor/PackageName/assets`.

### Third-party assets

If your application or extension uses a third-party asset package, do these steps:

* Create an asset bundle to list the asset files to be used. Make sure you set `AssetBundle::sourcePath` to  be `@bower/PackageName`, if the third-party package is a bower package (`@npm/PackageName` for npm packages, `@vendor/PackageName` for Composer packages).
* In the asset bundle class for your application/extension, list the third-party bundle class as a dependency.
* In `composer.json` of your application/extension, list the third-party package as a dependency. 


Directory may contain non-latin characters so `mb_strlen` should be used instread of `strlen`.