Image from catalog

Incomplete, work in progress - I made a pull request to allow discussion about the structure & implementation.

Note that some functions also use stuff used in npred_cube2 pull request (which is why I rebased against it in this PR).

To do (Ellis):
- [x] Check output type & format looks sensible
- [x] Ensure output values are sensible (Flux normalization)
- [x] Write unit tests
- [x] Add doc strings
- [x] Add short tutorial
I don't think this makes sense.
```
In [6]: catalog = 'simulation'

In [7]: catalog == ('1FHL' or 'simulation')
Out[7]: False
```
Maybe you want this?
```
if catalog in ['1FHL', 'simulation']:
```
Is this code covered by a unit test?