Yeah, it got a bit confusing...

If value is a null or false, it corresponds to "get" or "unset" actions on the key.  If it is a string, it is a shorthand which gets transformed into `array('value' => $string)`.  If `array_values($value) === $value` it really means that it's an array of associative arrays, which is necessary to allow for multiple `Set-Cookie` headers with the same cookie name and different options.

Unfortunately I couldn't think of a more succinct way to do it.  I suppose I could replace `array_values($value) === $value` with `isset($value['value'])` to be slightly less confusing.