Add programmatic API

Detail are in the doc. 

@arikon @scf2k 
Моя мысль сводилась к тому, что у тебя логика по присваиванию дефолтных директорий выполняется в двух местах, это увеличивает вероятность ошибок в будущем. Если здесь выполняется логика "сдвига параметров влево" так сказать, то как раз логичнее будет в path присвоить undefined