text: Title: Better error message when a DAG contains cycles
  Body: By definition, a DAG can't contain cycles but users might inadvertently create them.
  
  When a user creates a cycle, topological sorting doesn't make sense, then networkx throws an error.
  
  Topological sorting happens here: https://github.com/ploomber/ploomber/blob/51f432c565361b294080190b1f2aba245e21160f/src/ploomber/dag/DAG.py#L889
  
  It'd be better to catch that exception and raise another more informative error like "failed to process DAG, it contains cycles"
  
  Add this test to test_dag.py https://github.com/ploomber/ploomber/blob/master/tests/dag/test_dag.py
  
  To test it, add a dag with a cycle e.g.,:
  
  ```
  task_a >> task_b >> task_a
  ```
  
  catch exception to test error message with pytest raises https://docs.pytest.org/en/6.2.x/assert.html