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

Closes #499.
* confusing to have a param the same name as the function, maybe `propList` or some such
* please add a name to the anonymous function expression (viz. `function props(propList, obj) {`