Deprecate string options in URL helpers

Fixes https://github.com/rails/rails/issues/16958

I pretty much implemented @bronzle's fix in the issue comments, so he should have credit too.
We have a pretty complex logic here without test. For example, why were are using `||=`? Why we need to check if `value` is present?

I'd add tests for these cases to make sure we don't have regressions on this code.