What are the differences between value types and reference types in Swift, and how does Automatic Reference Counting (ARC) manage memory for each?