API rewrite + validation

Addresses #1, #9 and concerns over API intuitiveness @commuterjoy @matthew-andrews