This commit reworks the backup process to dynamically find the list of components.
This commit cleans up the package structure, to make two new top-level packages `internal` (for internal-use packages) and `pkg` (for general shared utility code).