improve `Widget` & add `./base/state`, `./base/event`, `./base/dom`, `./base/attribute`
use hammer.js for gesture
Merge branch 'feature/hammer' into develop