Add programmatic API

Detail are in the doc. 

@arikon @scf2k 
Для инкапсуляции. Эта штука открывается пользователю напрямую, и как показывает проактика, сколько подчеркиваний перед приватными методами не ставь, его все равно кто-нибудь когда-нибудь позовет чтобы сделать какую-нибудь странную штуку, о которой мы и не задумывалиcь