Deprecate frame as positional argument in SkyCoord

At the moment, SkyCoord can take frames as either keyword or positional argument. I would like to suggest a long-term deprecation of the ability to pass it as a positional argument, instead always requiring that the frame (if data is passed separately) would be passed as a keyword argument. Just to be clear, the following behavior would be retained:

```
SkyCoord(data, frame=FK5)
SkyCoord(FK5(1. * u.deg, 2 * u.deg))
SkyCoord(data, frame='fk5')
SkyCoord(SkyCoord(...))
SkyCoord(data, frame=FK5(...))
SkyCoord(data, frame=SkyCoord(...))
...
```

but the following would be deprecated:

```
SkyCoord('fk5', 1 * u.deg, 2 * u.deg)
SkyCoord(1 * u.deg, 2 * u.deg, FK5)
...
```

As was discussed in #3063, it probably makes sense to always require the user to specify ``frame=`` for the frame, except in the case where a frame with data or SkyCoord with data is passed as the single positional argument.

We don't have to remove this right now - we can deprecate it over one or two major releases, but we could already immediately update the docs to always show the explicit ``frame=`` behavior.

If people are against deprecating this, then I would like to suggest that we at least always use the explicit ``frame=`` in the docs to advocate this notation.

cc @taldcroft @Cadair @eteq
What about combining with the `SkyCoord` instance test and raising ValueError using `arg.__class__.__name__`?