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

## Environment
**Liquibase Version**: 3.8.5 - 4.1

**Liquibase Integration & Version**: gradle

**Liquibase Extension(s) & Version**: 

**Database Vendor & Version**: firebird 2.5, oracle

**Operating System Type & Version**: win 10 java 8

## Description
The 'addColumn' tag supports 'afterColumn' and 'position', but these tags are ignored in the SQL generation in Firebird and Oracle ( https://docs.liquibase.com/concepts/advanced/column.html ). Therefore it is not possible to insert  a column at a specific position in Firebird or after a column in Oracle.

There is also no documentation on which dbms supports 'afterColumn' or 'position'.

## Steps To Reproduce
JUnit Test:

```
 @Test
  void testLiquibaseOrderBug() throws IOException {
    DatabaseChangeLog log = new DatabaseChangeLog();
    ChangeSet set = new ChangeSet("Test", "test", Boolean.FALSE, Boolean.FALSE, null, "context",
                                  "firebird", log);
    AddColumnChange addcol = new AddColumnChange();
    addcol.setTableName("MI6");
    AddColumnConfig addColumnConfig = new AddColumnConfig();
    addColumnConfig.setType("int");
    addColumnConfig.setValueNumeric(0);
    addColumnConfig.setName("James");
    addColumnConfig.setPosition(2);
    addcol.addColumn(addColumnConfig);
    set.addChange(addcol);

    String[] changesets = getXmlChangelogAsArray(set);
    assertEquals("<column name=\"James\" position=\"2\" type=\"int\" valueNumeric=\"0\"/>",changesets[4].trim());

    assertEquals("ALTER TABLE MI6 ADD James INT POSITION 2;", getLiquiSql("firebird", set));
  }

  @Test
  void testLiquibaseAfterBug() throws IOException {
    DatabaseChangeLog log = new DatabaseChangeLog();
    ChangeSet set = new ChangeSet("Test", "test", Boolean.FALSE, Boolean.FALSE, null, "context",
                                  "oracle", log);
    AddColumnChange addcol = new AddColumnChange();
    addcol.setTableName("MI6");
    AddColumnConfig addColumnConfig = new AddColumnConfig();
    addColumnConfig.setType("int");
    addColumnConfig.setValueNumeric(0);
    addColumnConfig.setName("James");
    addColumnConfig.setAfterColumn("Bond");
    addcol.addColumn(addColumnConfig);
    set.addChange(addcol);

    String[] changesets = getXmlChangelogAsArray(set);
    assertEquals("<column afterColumn=\"Bond\" name=\"James\" type=\"int\" valueNumeric=\"0\"/>",changesets[4].trim());

    assertEquals("ALTER TABLE MI6 ADD James INTEGER AFTER Bond;", getLiquiSql("oracle", set));
  }

  private String[] getXmlChangelogAsArray(ChangeSet set) throws IOException {
    List<ChangeLogChild> changes = new ArrayList<>();
    changes.add(set);
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    ChangeLogSerializer serializer = new XMLChangeLogSerializer();
    serializer.write(changes, stream);
    String[] changesets = new String(stream.toByteArray()).replaceAll("\r", "")
      .split("\n");
    return changesets;
  }
  
  private String getLiquiSql(String dbms, ChangeSet set) throws IOException {
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    ChangeLogSerializer serializer = new FormattedSqlChangeLogSerializer();
    set.setFilePath("export."+dbms+".sql");
    List<ChangeLogChild> changes = new ArrayList<>();
    changes.add(set);
    serializer.write(changes, stream);
    return new String(stream.toByteArray()).split("\n")[3];
  }
```

## Actual Behavior
Positions and afterColumn tags are ignored. 
An afterTable tag in Oracle leads to following sql: `ALTER TABLE MI6 ADD James INTEGER`
A position tag in Firebird leads to following sql: `ALTER TABLE MI6 ADD James INT`

## Expected/Desired Behavior
`    <changeSet author="test" context="context" dbms="firebird" id="Test" objectQuotingStrategy="LEGACY">
        <addColumn tableName="MI6">
            <column name="James" position="2" type="int" valueNumeric="0"/>
        </addColumn>
    </changeSet>`

should create in Firebird something like

`ALTER TABLE MI6 ADD James INT POSITION 2`

and 

`    <changeSet author="test" context="context" dbms="firebird,oracle,mssql" id="Test" objectQuotingStrategy="LEGACY">
        <addColumn tableName="MI6">
            <column afterColumn="Bond" name="James" type="int" valueNumeric="0"/>
        </addColumn>
    </changeSet>`

should create in Oracle something like

`ALTER TABLE MI6 ADD James INTEGER AFTER Bond`


instanceof FirebirdDatabase) || (database instanceof SybaseDatabase) || (database instanceof
            SybaseASADatabase) || (database instanceof InformixDatabase);
    }
    @Override
    public ValidationErrors validate(AddColumnStatement statement, Database database, SqlGeneratorChain sqlGeneratorChain) {
        ValidationErrors validationErrors = super.validate(statement, database, sqlGeneratorChain);
        if (statement.isMultiple()) {
            for (AddColumnStatement column : statement.getColumns()) {
                validateSingleColumn(column, database, validationErrors);
            }
        } else {
            validateSingleColumn(statement, database, validationErrors);
        }
        return validationErrors;
    }
    private void validateSingleColumn(AddColumnStatement statement,
            Database database, ValidationErrors validationErrors) {
        if ((database instanceof DerbyDatabase) && statement.isAutoIncrement()) {
            validationErrors.addError("Cannot add an identity column to derby");
        }
    }
    @Override
    protected String generateSingleColumnSQL(AddColumnStatement statement,
            Database database) {
        String alterTable = " ADD " + database.escapeColumnName(statement.getCatalogName(), statement.getSchemaName(), statement.getTableName(), statement.getColumnName()) + " " + DataTypeFactory.getInstance().fromDescription(statement.getColumnType() + (statement.isAutoIncrement() ? "{autoIncrement:true}" : ""), database).toDatabaseDataType(database);
        alterTable += getDefaultClause(statement, database);
        if (primaryKeyBeforeNotNull(database)) {
            if (statement.isPrimaryKey()) {
                alterTable += " PRIMARY KEY";
            }