Added functions to source to check whether the source has been successfully imported into the database. This in turn required a distinction between different kinds of runs so the database now logs in the operation field whether it's a sample run or an import (added configurable variables in run.py)
Added a delete functionality for source (does nothing but redirect). The delete function doesn't use http's DELETE put a post for browser compatibility.

Modified the operations in the editor so that user's cannot load a sucessfully loaded dataset (gives a success messages). If it hasn't been successfully loaded, but is loadable the user can press the normal sample or load buttons, if it's not loadable the user can delete ther source.

Note that this does not allow the user to delete a loadable dataset.

Modified the loadable property so that it also checks if the source has already been successfully loaded.
Better flow of buttons. Now users need to sample before they can load. Delete source is available at all stages except after loading.
Added icons to sample and load (make the buttons smaller) and moved "Delete source" into title attribute (to make delete button smaller)
Renamed Sample button to Test and added Delete text to Delete button
Changed sample to a dry run (so data isn't loaded when testing the source).
Check for unique constraint when doing a dry run since we don't touch the database
Show operation buttons for all sources, not the first one.
Mark all runs for all sources where loaded data is deleted as 'removed'. Give it a nice status label in the list (default color).
Implement delete functionality
Added a check so that successfully loaded sources cannot be deleted
Updated test for erroneous values. The test now also grabs the unique key constraint errors (it's a dry run).
Added two tests, one to delete a source, another to try to delete a successfully loaded source (which should fail).

Needed to change the csvimport_fixture which creates a test user account (but could only be called once -- in the 'Run tests' -- for some weird reason).
Minor addition: Added commenting to explain why we don't return an error message
Merge remote-tracking branch 'origin/master' into 549-enable-source-removal
Disable a button (with message) when source is being run to avoid loading the same source again
Merge remote-tracking branch 'origin/master' into 549-enable-source-removal

Conflicts:
	openspending/test/helpers.py
	openspending/ui/templates/source/_list.html
Added Sander van der Waal to the CONTRIBUTORS list