Add -noEmit compiler flag that skips the emit stage in ts.compile()

Fixes #1172

I'm not sure about the third commit. -out and -outDir are optional to begin with, and a lot of the other options also don't make sense when not emitting - -declaration, -emitBOM, -mapRoot, -module, -preserveConstEnums, -removeComments, -sourceMap, -sourceRoot, -watch. Should it check for all these parameters? Or just give -noEmit precedence and silently ignore them (i.e. just the first two commits)?
Declaration errors (e.g. exported type using other unexported types) are only generated when we emit. this means with --noEmit you are not getting all the errors.

Options:
1. Make it an error to use --d with --noEmit (I am ok with that, not a good experience though)
2. If --noEmit flag is set, call getDeclarationDiagnostics to report diagnostics if --d is exposed (better experience, but will complicate the logic)
3. do not handle --noEmit here, but do it in the emitter to skip the actual writing of files (that should solve the issue with 2 but will be a slightly bigger change, and i am not sure i like the "emitter" handling --noEmit

Clearly i have no good solution here, so other suggestions are welcomed :)