Fixed #23376 -- Make documentation about required Storage methods consistent.

The following methods **should** be implemented, but are not required:

 * Storage.delete()
 * Storage.exists()
 * Storage.listdir()
 * Storage.size()
 * Storage.url()

Updated documentation to reflect this fact and give a couple of examples
where some methods may not be implemented. Add a warning that not
implementing some methods will result in a partial (possibly broken)
interface.

Ticket: https://code.djangoproject.com/ticket/23376 
I would structure it like this:

```
A storage backend will typically have the following methods:

   * list
   * of
   * methods

Note however that not all these are required, and may be deliberately omitted.

For example, if `Storage.listdir` is very expensive on the backend in question, you may decide 
not to implement it.

...
```

However I'd also like to know *which* of the methods are optional. Is it true that they can all be omitted?