Simplify time handling internally and for build scans (#2857)
* Don't make TimeProvider Serializable.
This isn't safe and generally doesn't make sense.
* Extract and promote the concept of a build timer.
This was previously not well defined and being overlaid with the concept of when a user/tool requested something, which is not always the same thing.
* Pare down the deprecated org.gradle.util.Clock down to the minimum required.
Internal usage is replaced by a `getStartTime()` directly on BuildRequestContext.
What is left is only kept for backwards compatibility with scans.
* Rename TimeProvider to Clock.
* Move BuildExecutionTimer out of baseServices into core, and into a better package.
* Remove unused.
* Simplify the time package by merging types.
* Prevent the client's build started timestamp from being later than when the provider received the build request.
* Provide a dedicated mechanism for conveying the build start time to build scans.
* Consolidate the ways of formatting durations.