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

Closes #499.
`prop` is manually curried since it is a critical path and we wanted to squeeze as many cycles out as possible. i think using curry methods makes sense until we know we need to optimize. this looks really good to me.