Add support for struct with list param shorthand

This was already supported within a list via
`list-structure(list-scalar, scalar)` but not in the non-list form of
`structure(list-scalar, scalar)`. This commit adds support and refactors
the code to reuse as much as possible between the two.

cc @jamesls, @kyleknap