Validate a declaration.
(valid-decl decl table ienv) → (mv erp new-decl return-types new-table)
If it is a static assertion declaration, we validate it using a separate validation function. Otherwise, we first validate the declaration specifiers and then the list of initializer declarators, passing information from the former to the latter. We ensure that the list of initializer declarators is not empty (i.e. there is at least a declarator), or the declaration specifiers declare a tag, as required in [C:6.7/2]. We ignore the GCC extension for now.