Renamed `props` to `propOf`, reimplemented `props` as multiple `prop`

Closes #499.
why curry manually instead of `curry2(function props(propList, obj)` etc.?