Refactor layer types to have explicit processes
All layers should now be implemented with an explicit set of processes included as fields.
The goal here is to improve readability by making layer types less vague about what functionality they implement.
This PR also adds support for dynamic layer volumes; i.e. allowing layer thickness to be evolved over time as a prognostic variable when CryoGrid.hasfixedvolume(::Type{T}) where {T<:Layer} = false
for layer type T
.