add PID file
set locking ID to hostname:instance
consumers should not exit, random wait between 50 and 70 seconds
tidy up lock key, always set hostname
improve fixedProperties, pass taskid to DataSource
concatenate instead
add docblocks
getCampaignIdFromReference
lowercase the data keys
Added support for conditional variable substitutions
Added support for passing additional data into datasources
configureForm called to allow customisation of the data source form
Added additionalData field in pushCampaign and passed this data through to the data source
Added support for setting the return-path and reply-to addresses to something different to the 'from' address
Update CronParser to support prevRun
convert htmlentities
throw exception if cron pattern is empty
translator now fully translates subject and plaintext, and uses braces only for html blocks
automatically reload message
show subject instead of ref on campaign list