It should handle all types as is. Takes in and returns `interface{}`

`firstof` arguments get evaluated before being passed in,
so when we have an arguement, such as `flash.Value`, if it's not there, we get the empty string

That's why the check for string is there
I think `val.(string) == ""` should be one of your fancy reflect things
something like `reflect.ValueOf(val).KindOf() == reflect.String && val.(string) == ""`

pushing new commit with fix now