added checking for non-string (invalid) keys
support arbitrary non-BSON objects as values - serialize with jsonpickle