Add core.py, converge on DRY code in master and minion
Add exceptions
Merge remote-tracking branch 'upstream/develop' into sam_raet_20