Add programmatic API

Detail are in the doc. 

@arikon @scf2k 
кстати, по-моему в этой строчке вообще смысла нет, paths дальше в этой функции не используется, а за пределы функции изменения не выйдут