How does Go handle memory management and garbage collection?