<!--- This environment context section helps us quickly review your PR. 
      Please take a minute to fill-out this information. -->

## Environment
**Liquibase Version**: 3.10

**Database Vendor & Version**: any

**Operating System Type & Version**: any

## Description
Create a custom change with a params list where there is no "name", it will trigger a NullPointerException instead of a nicer validation error explaining the problem.

## Steps To Reproduce
A changelog file with the following customChange:

```
     - customChange:
         class: com.company.customchanges.AddAttribute
         param:
           fieldType: '12'
           mandatory: '1'
           labelKey: userAttribute.firstName
           maxLength: '50'
           index: '2'
           newline: '1'
           readOnly: '1'
           visible: '1'
```

which **was generated by the Liquibase YamlChangelogSerializer!!** (which is a separate issue)
trriggered a NullPointerException.

## Actual Behavior
A NullPointerException without a message.

## Expected/Desired Behavior
A clearer validation error should be thrown indicating the cause of the problem.


package liquibase.change.custom;
import liquibase.Scope;
import liquibase.change.AbstractChange;
import liquibase.change.ChangeMetaData;
import liquibase.change.DatabaseChange;
import liquibase.change.DatabaseChangeProperty;
import liquibase.database.Database;
import liquibase.exception.*;
import liquibase.parser.core.ParsedNode;
import liquibase.parser.core.ParsedNodeException;
import liquibase.resource.ResourceAccessor;
import liquibase.statement.SqlStatement;
import liquibase.util.ObjectUtil;
import java.util.*;
/**
 * Adapts CustomChange implementations to the standard change system used by Liquibase.
 * Custom change implementations should implement CustomSqlChange or CustomTaskChange
 *
 * @see liquibase.change.custom.CustomSqlChange
 * @see liquibase.change.custom.CustomTaskChange
 */
@DatabaseChange(name="customChange",