More robust use of context reporting

 - when warning must not be suppressed, use `reporter.warning`
 - don't (implicitly) rely on `reporter.warning` being silent after typer
   --> don't do pure expression check after typer
wip: reduce Context's error reporting surface

all error reporting should eventually go through
context.reportBuffer (which I'd rename to context.reporter)
no forwards allowed in Context (or anywhere else)
untangle ambiguous errors

now that all reporting mode manipulators are private to Context,
let's untangle this mess:
  - every setReportErrors gets a corresponding setAmbiguousErrors(true)
  - every setBufferErrors gets a corresponding setAmbiguousErrors(false)
  - every setThrowErrors  gets a corresponding setAmbiguousErrors(false)

doing this to eventually get to a strategy-based approach to reporting,
where the reporting mode is captured in the reporter being used,
with as little mutation as possible to capture more invariants
(would like to stop throwing TypeError eventually and only have two modes:
buffering reporter, regular reporter)
wip: towards different ReportBuffers

The only thing that changes somewhat often in ReportBuffer
behavior is whether to buffer or not.
ThrowErrors is constant throughout a phase, so let's use a different
ReportBuffer for that, and eliminate branching.

buffer errors in all Context#error overloads
--> this seems like the right thing to do
except for two shady neg tests, the test suite passes

the failures are caused by the buffered error masking the more verbose one
[tests pass] don't buffer in context.error
WIP: which context should throw for macro stuff to work?
wip: throwing reporter
quick partest