Having a function call as a default argument causes the function to be called
once (upon declaration) which leads to confusing behavior. Instead we pass in
`None` and call `date.today()` in the function body.
Before: `644 passed in 19.89s`.
After: `644 passed in 12.47s`.
Running with `python -m pytest --durations=5` showed this test case
was a huge outlier, and timing its execution showed a huge disparity
between the time `TechnicalDrawing` thought it took to run and the
time its caller saw et up. Dropping the Builder context makes these
times lineup.
Tested the individual test case speed-up with `hyperfine -- 'python -m pytest tests/test_drafting.py::TestTechnicalDrawing::test_basic_drawing'`
which reports before & after of:
```
Benchmark 1: python -m pytest tests/test_drafting.py::TestTechnicalDrawing::test_basic_drawing
Time (mean ± σ): 9.488 s ± 0.534 s [User: 9.525 s, System: 1.478 s]
Range (min … max): 9.117 s … 10.929 s 10 runs
Benchmark 1: python -m pytest tests/test_drafting.py::TestTechnicalDrawing::test_basic_drawing
Time (mean ± σ): 1.951 s ± 0.040 s [User: 2.292 s, System: 1.111 s]
Range (min … max): 1.871 s … 2.020 s 10 runs
```
I dug a little into why it was so much slower under the builder and
the answer seems to be ~13k calls to deepcopy, but I haven't dug
deeper yet to figure out if there's a way to "transfer" to the builder
rather than making copies.