prevent method ambiguity problems

Defining `start` etcetera for `ShellCompleteString` as `start(x::ShellCompleteString, args...) = start(x.s, args...)` leads to numerous method-ambiguity errors, since `ShellCompleteString <: String` but `args` is untyped.

This patch works around the problem by declaring the argument types explicitly, mirroring those in `string.jl`.