fix wrong String.at/2 output when second arg is not an integer

String.at/2 has the same issue as String.split_at/2 in issue #2874:  

```
iex(1)> String.at("elixir", 0.1)
** (FunctionClauseError) no function clause matching in String.do_at/3
    (elixir) lib/string.ex:1025: String.do_at({"l", "ixir"}, 0.1, 1)
iex(1)> String.at("elixir", -0.1)
nil
```

The fix is similar. 

----
I took a look at the other functions right now at String module using a second parameter, they all seems to be correctly using a is_integer guard.