Some forward-looking changes for destructuring-bind.
- &OPTIONAL with no variables when unparsing a ds-lambda-list matters.
Otherwise the lambda list (A &OPTIONAL ((&OPTIONAL))) - which is merely "weird"
turns into (A &OPTIONAL (())) which is not only weird, but illegal,
because () is another spelling for NIL, and NIL is a constant.
The former lambda list takes 1 or 2 arguments. The 2nd argument, if supplied,
must be NIL, because it binds to a lambda that accepts zero things.
- Add DS-LAMBDA-LIST-SYMBOLS which extracts all bound symbols.