How does Go handle concurrency, and what are the various mechanisms it provides for managing concurrent processes?