Permifrost is over-modularized

Describe the feature

Currently, permifrost is over-modularized, due to the origins of the project. As an example, one of the core files in this repo is 1761 lines and nested within core/permissions/utils

wc -l src/permifrost/core/permissions/utils/snowflake_grants.py
    1761 src/permifrost/core/permissions/utils/snowflake_grants.py

This makes it difficult for new contributors to get started with permifrost as they have to navigate an unintuitive set of paths to find where to make a change.

Demodularizing permifrost by moving most of the python modules into a root src/permifrost folder should make it easier to navigate and help with future refactoring efforts.

.
├── __init__.py
├── cli
│   ├── __init__.py
│   ├── __main__.py
│   ├── cli.py
│   └── permissions.py
└── core
    ├── __init__.py
    ├── logger.py
    └── permissions
        ├── __init__.py
        ├── entities.py
        ├── snowflake_spec_loader.py
        ├── spec_schemas
        │   ├── __init__.py
        │   └── snowflake.py
        ├── types.py
        └── utils
            ├── __init__.py
            ├── error.py
            ├── snowflake_connector.py
            ├── snowflake_grants.py
            ├── snowflake_permission.py
            ├── snowflake_role_grant_checker.py
            └── spec_file_loader.py

consider a flattened structure, such as this:

❯ tree -P \*.py --prune
.
├── __init__.py
├── cli
│   ├── __init__.py
│   ├── __main__.py
│   ├── cli.py
│   └── permissions.py
├── entities.py
├── error.py
├── logger.py
├── snowflake_connector.py
├── snowflake_grants.py
├── snowflake_permission.py
├── snowflake_role_grant_checker.py
├── snowflake_spec_loader.py
├── spec_file_loader.py
├── spec_schemas
│   ├── __init__.py
│   └── snowflake.py
└── types.py