Merge 2.0.0 to master

- Refactor: Remove `observer` and `observerAttr` when invoke `i18n(code, params, observer, observerAttr)`. Listen on event `i18n:languageChanged` instead. Issue [#3](https://github.com/kiddy2910/angularjs-i18n/issues/3)
- Refactor: Rename `setDebugMode` method to `enableDebugging`
- Improve: Accept case insensitive language when declare the dictionary. Issue [#6](https://github.com/kiddy2910/angularjs-i18n/issues/6)
- Improve: `i18nProvider.add` method accepts *name of constant service*, *constant service object* or *array of them*. Issue [#1](https://github.com/kiddy2910/angularjs-i18n/issues/1)
- Improve: i18n directive can be in one of formats (issue [#2](https://github.com/kiddy2910/angularjs-i18n/issues/2)):
 + An object: `params="{ name: 'Duy Tran', country: data.user.country }"`
 + An array of values: `params="[ 'Duy Tran', data.user.country ]"`
 + A value: `params="data.user.name"` or `params=" 'Duy Tran' "`
- Improve: i18n service accepts one of parameters format (issue [#7](https://github.com/kiddy2910/angularjs-i18n/issues/7)):
 + An object: `i18n('sample.manyParameters', { name: 'Duy Tran', country: data.user.country })`
 + An array of values: `i18n('sample.manyParameters', [ 'Duy Tran', data.user.country ])`
 + A value: `i18n('sample.manyParameters', 'Duy Tran')` or `i18n('sample.manyParameters', data.user.country)`