Multiscan

User request. Now one can do multidimensional scans. Eyecandy:

```python
...
from concert.processes import multiscan

# 1D case
multiscan(feedback, motor['position'], 0 * q.mm, 10 * q.mm, 10)

# 2D case
multiscan(feedback, motor['position'], 0 * q.mm, 10 * q.mm, 10
                camera['frame_rate'], 1 / q.s, 100 / q.s, 20)

# 3D case
multiscan(feedback, motor['position'], 0 * q.mm, 10 * q.mm, 10
                rot_motor['position'], 0 * q.deg, 180 * q.deg, 5,
                camera['frame_rate'], 1 / q.s, 100 / q.s, 20)
```

Todo:
- [ ] - make the function call API as straightforward as possible
- [ ] - decide whether `scan` should stay or we move `multiscan` -> `scan`
- [ ] - update the docs