good progress, extracted a generic BitmapAllocator out from my bitmap physical memory allocator, so we can reuse it to build a custom pool allocator for the TaskStacks
the custom pool allocator is necessary, because I want to have a fixed pool of stacks for kernel tasks, and unmap all their guard pages up front
the standard pool I use stores a freelist in unused objects, which crashes if I unmap the guard page
so i'm implementing a custom allocator that stores uses a bitmap instead of a freelist, and stores the metadata out of line