Much more cleanup.  Moved all the `standard' parsing code into
one function that takes a `grammar' argument and parses a list
according to it.  The `grammar' can provide custom arguments for
checking elements of the list, so it's easy to handle the special
cases (specializers in method lambda lists, no default values for
optional and keyword arguments in generic function lambda lists, etc.)