How does memory management work in Swift? Explain the difference between strong, weak, and unowned references.