Add programmatic API

Detail are in the doc. 

@arikon @scf2k 
Если асинхронность только из-за чтения файла, то можно пожертвовать ради более привычного API.