refactored error handling and position tracking

All errors now inherit from DCPUError, which lives in dcpucore.errors.
There is also a new position-tracking system integrated into the code
and assembler modules, which allows for filename and line information
to be carried with instructions, addresses, and directives.