Scalable topology optimization with the kernel-independent fast multipole method