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.
yes, focus() needs to be called asynchronously. The reason is that a single controller may call MyFocusManager.focus() several times, we will always want the last one called to have precedence.