Richer props

This stores more information in the prop objects, and changes the API from `props(x = prop(quote(cyl))` to `props(prop("x", quote(cyl))`.