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

## Environment
**Liquibase Version**: 4.0.0

## Description
I am getting an NPE when I create a new FileSystemResourceAccessor(rootPath), with the following stack trace:

```
java.lang.NullPointerException
        at liquibase.Scope.getLog(Scope.java:278)
        at liquibase.resource.FileSystemResourceAccessor.addRootPath(FileSystemResourceAccessor.java:54)
        at liquibase.resource.FileSystemResourceAccessor.<init>(FileSystemResourceAccessor.java:36)
```

Looking at the Liquibase code, I see that SmartMap#get defines its result as a nullable, however, the Scope class does not check for null in this and other places.

## Steps To Reproduce
I'm running tests in my project, using liquibase-core:
Created this issue for tracking purposes, where you can also find the full stack trace: https://github.com/Treehopper/liquibase-lsp/issues/17

## Additional Context
In my project, I have to run scripts asynchronously. This, and the fact that the problem only occurs occasionally hints at a race-condition.


child(listener, null, runner);
    }
    public static void child(LiquibaseListener listener, Map<String, Object> scopeValues, ScopedRunner runner) throws Exception{
        child(listener, scopeValues, () -> {
            runner.run();
            return null;
        });
    }
    public static <T> T child(LiquibaseListener listener, Map<String, Object> scopeValues, ScopedRunnerWithReturn<T> runner) throws Exception{
        String scopeId = enter(listener, scopeValues);
        try {
            return runner.run();
        } finally {
            exit(scopeId);
        }
    }
    /**
     * Convenience version of {@link #enter(LiquibaseListener, Map)} with no {@link LiquibaseListener}
     */
    public static String enter(Map<String, Object> scopeValues) throws Exception {
        return enter(null, scopeValues);
    }
    /**
     * Creates a new scope without passing a ScopedRunner.
     * This mainly exists for tests where you have a setup/cleanup method pattern.
     * The recommended way to create Scopes is the "child" methods.
     * When done with the scope, call {@link #exit(String)}
     *
     * @return Returns the scopeId to pass to to {@link #exit(String)}
     */