Add cascade option to drop tables tool

The script will fail without this as it needs to cascade to other
relations
Add comment explaining add_node params

It's difficult to see what is required without this
Merge pull request #227 from alphagov/explain-add-node-params

Add comment explaining add_node params
Merge pull request #226 from alphagov/add-cascade-option-to-drop-tables-tool

Add cascade option to drop tables tool
[#77608474] Add `DashboardViewsGetTestCase` to `test_dashboard.py`

- Doesn't make assertions about UUIDs, as they constantly seem to change. **I THINK** this is by design, but would like to check before having this merged.
[#77608474] Implement dashboard `GET`

**Nicer implementation pattern suggestions welcome**

- We're still using the same url here, so the `dashboard` method routes to a `get_dashboard` method, which feels properly dumb but...
  - I didn't want to wrestle with trying to route based on the request inside `urls.py`
  - Annoyingly this means that `@require_http_methods` on the `dashboard` method now takes `(['POST', 'PUT', 'GET'])` which feels extra dumb, because we're putting routing logic in a bloody view.
[#78806122] Return 400 on module validation error

At the moment we fail with a 500 for what should be a 400.

This change required blank=True to be set on a few models. The 'null'
argument only applies to whether the database field can be null. The
'blank' argument applies to the validation.
Merge pull request #232 from alphagov/get_dashboard

[#77608474] Implement dashboard `GET`
Merge pull request #228 from alphagov/fail-module-create-with-error

[#78806122] Return 400 on module validation error
[#78806122] Return 400 on module validation error

At the moment we fail with a 500 for what should be a 400.

This change required blank=True to be set on a few models. The 'null'
argument only applies to whether the database field can be null. The
'blank' argument applies to the validation.
[#78806182] Roll back dashboard if any part fails

If any part of a dashboard creation (ie. dashboard, modules, links etc)
fails then the entire transaction should be rolled back. This has been
done by wrapping the view in a transaction. Unfortunately the
transaction provided by Django isn't really suitable for views so this
commit also introduces a view decorator that will roll back the
transaction if the response code is an error.