Modularization

The process we aim to take for sbt 1.0 is to disassemble sbt into smaller modules and layers.
To be clear, sbt 0.13’s codebase already does consist of numerous subprojects.

Layers are more coarse-grained sets of subproject(s) that can be used independently.
Another purpose of the modularization is to distinguish between public API and internal implementation.
Reducing the surface area of the sbt code base has several benefits:

It makes it easier for the build users and the plugin authors to learn the APIs.

It makes it easier for us to maintain binary and semantic compatibilities.