Use promises internally and refactor out validate.
0.1.0