How does Grand Central Dispatch (GCD) manage thread dispatching in iOS, and what is the difference between serial and concurrent queues?