Merge core.py with various ...toolbox...py files

I'd actually just leave that out... do the data actually have negative weights? If not, no problem. If they do, we should check them and correct accordingly at the start (right after reading in data) rather than in some random deeply buried function call.