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

## Environment
**Liquibase Version**: 4.3.4

**Liquibase Integration & Version**: CLI

**Database Vendor & Version**: PostgreSQL 12

**Operating System Type & Version**: Ubuntu 20.04

## Description
Hello,

I'm facing the same problem that's described in [this forum thread](https://forum.liquibase.org/t/access-postgis-from-different-schema/4708/3) (I did not reply in the forum because the number of links in a comment is restricted for new users). I'm using postgis as well but I guess it's the same for any extension that you would install on the public schema. The problem is that liquibase sets the search_path to only the default schema.

In the code, this is done in [DatabaseUtils#initializeDatabase](https://github.com/liquibase/liquibase/blob/master/liquibase-core/src/main/java/liquibase/database/core/DatabaseUtils.java#L36), which is called from [PostgresDatabase#rollback](https://github.com/liquibase/liquibase/blob/master/liquibase-core/src/main/java/liquibase/database/core/PostgresDatabase.java#L421) and the rollback function seems to be called for each changeset, after the preconditions are checked, in [ChangeSet#execute](https://github.com/liquibase/liquibase/blob/master/liquibase-core/src/main/java/liquibase/changelog/ChangeSet.java#L614).

I think that the problem was introduced with this commit: https://github.com/liquibase/liquibase/commit/feb2412. Before that, the search_path was not forced for each changeset, and there was no problem using an extension from the public schema without using prefixes.

I guess that there was a good reason to force the search_path, but I think that there should be an option to override the default behavior and to allow the user to set a custom search_path.

## Steps To Reproduce
With postgis:

* Add the postgis extension to the public schema: `CREATE EXTENSION postgis;`
* Run liquibase on another schema (`my_schema`) with the following changeset:

```
create table my_schema.test_table (
     a_box        Box2D
)
```

Liquibase will fail with the following error:

```
ERROR: type "box2d" does not exist
```

Thanks.


Object next = "START";
                while ((next != null) && !("create".equalsIgnoreCase(next.toString()) || "alter".equalsIgnoreCase(next
                        .toString())) && clauseIterator.hasNext()) {
                    next = clauseIterator.nextNonWhitespace();
                }
                clauseIterator.replace("ALTER");
                procedureText = parsedSql.toString();
            }
            else {
                String fullyQualifiedName = database.escapeObjectName(statement.getProcedureName(), StoredProcedure.class);
                sql.add(new UnparsedSql("DROP PROCEDURE IF EXISTS " + fullyQualifiedName));
            }
        }
        procedureText = removeTrailingDelimiter(procedureText, statement.getEndDelimiter());
        if (procedureText == null) {
            return sql.toArray(new Sql[0]);
        }
        if ((database instanceof MSSQLDatabase) &&
            procedureText.toLowerCase().contains("merge") &&
                !procedureText.endsWith(";")) { 
            StringClauses parsed = SqlParser.parse(procedureText);
            StringClauses.ClauseIterator clauseIterator = parsed.getClauseIterator();
            boolean reallyMerge = false;
            while (clauseIterator.hasNext()) {
                Object clause = clauseIterator.nextNonWhitespace();
                if ("merge".equalsIgnoreCase((String) clause)) {
                    reallyMerge = true;
                }
            }
            if (reallyMerge) {