Eagerly verify preconditions on public APIs.

Closes #48. 

Alright, @swankjesse, do your worst! Here's my opinion in implementing this change: Seeing a `NullPointerException` which throws both without a message and after an additional method call or two internally places doubt in the user's mind as to whether or not the problem is their fault (passing `null`) or shoddy programming in the library.