Previous behavior: return first item or throw an option on empty collection
Current behavior: similar to Rust, return Some(first item) or None
The behavior of BaseCollection::firstOr is not changed, with eager loading.
For lazy loading, we can now use $collection->first()->getValueOrElse().