Fix sfcc allocations, refactor heat methods, etc
This commit accidentally ended up accumulating way too many changes, some of which are from implementing snow on the other branch. This is bad practice... do not do this.
Summary of changes:
- Fixes some weird performance/allocation issues with the SFCC newton solver
- Re-adds the process type parameter to BoundaryProcess; this is to prevent ambiguous method dispatches between different layer interactions
- Adds 'thickness' and 'midpoints' methods to model interface to generalize distance calculations for fluxes; this allows some layers/processes (e.g. snow) to override the default cell width calculations
- Adds a top-level 'grid' field to layer state to support variable-independent grid operations
- Re-adds layer-only diagnosticstep
- Adds utility methods to support other changes