Simplify Query and friends.

The general line I'm following here is to assume that `SQLCompiler`, `SQLEvaluator`, `Query`, etc. are interfaces that in the future could become part of the Django public API (e.g. backends with specific functionality, other sql dialects, etc).

Independently of this line be followed or not, I only see advantages in having the API internally clean, thus this PR.

Changes:

* c9030dc makes 3 attributes of SQLCompiler private (underscored) since they are not used outside it.

* fd33806 defines a public (not Django public, class public) interface of Query for getting data from its `deferred_loading` (e.g. for the SQLCompiler):

`deferred_loading` is now exposed by two methods: `get_loaded_field_names` and `get_loaded_columns`.

In particular, before we would use
```
columns = {}
query.deferred_to_data(columns, query.deferred_to_columns_cb) # `deferred_to_columns_cb` is a function(!)
```

now we use
```
columns = query.get_loaded_columns()
```

Should I open a ticket for this particular change (like I did in [#22826](https://code.djangoproject.com/ticket/22826)), or should I open a broader ticket and let this PR be its ground to internal simplifications of `Query`?