Re-wrote much of this library. Added an Enumerable to provide key value argument pairs and added some better error messages.