What is Automatic Reference Counting in Swift, and how do strong, weak, and unowned references prevent retain cycles?