Adrien's NGUI work in progress

Since I'm working on several items at the same time on NGUI, this PR can serve as a single place to review ongoing changes.
Two concerns. 
- Whenever the newVal is updated we are adding a a function to $timeout but I am not sure where we are resolving the promise that is being returned from $timeout. So if my guess is right if the newVal changes 4 times we are adding/creating 4 timeout promises and they are executed consecutively?

- ```element[0][o.focus? 'focus': 'select']()```  Not sure if it is a little less intuitive but at the end I am not sure if I understand why we need to do this```element[0]['focus']()```  instead of 

```javascript 
if (o.focus === "select") {
  element[0].focus();
}  else if (o.focus === "select") {
  element[0].select();
}
```

Not a huge fan of ternary operator. Chances of screw-ups are a little high while minification.