Bootstacks are unused after APs executed sched_throw() in init_secondary_tail() and started executing on proper idle thread stack.
Add sysinit that detects that the idle thread for each CPU was scheduled at least once, and free corresponding bootstack.
I believe that slight addition of the code (~200 bytes) is worth it, because even on typical small modern desktop CPU we leak 128K of memory otherwise (4 pages x 8 threads).