Add plugin error handling

Instead of throwing a normal error, this uses the compileStep.error method used by packages like coffeescript and less. The errors thrown this way are more useful and make debugging easier. The variable "content" was renamed to "source" so that we're using the same variable names as coffeescript and less.