WIP SIP-23

WIP PR to centralize discussion, accept improvements/tests/polish/docs/...

Everyone is welcome to look for the checkboxes/TODO items here and in the discussion below and take them on! If you're not sure where/how to start, just ask!

- [ ] tests
- [ ] include SIP doc under spec/
- [ ] include negated literal types in InfixType BNF (like prefixExpr)
- [ ] update syntax overview in spec
- [ ] spec the subtyping relationship between `ConstantType` / `LiteralType` and `scala.Singleton`.
- [ ] predicate on language flag (can't do this in parser, though -- use -Xsip:23 instead?)
- [ ] When inferring signatures, treat literal types like singleton types (i.e., don't infer them -- widen instead)
- [x] treat singleton type bound on type param same as Singleton bound (stopWidening when bounds exists _.isStable)
- [x] include fix for https://issues.scala-lang.org/browse/SI-8564 (idm.deconst)
- [x] support negative literals
- [ ] Support Symbol literals --> challenge: desugars into Symbol.apply("symbol")
- [ ] Support class literals?
- [ ] `val t: 1 = t`  (NOTE: t has value 0...)
- [ ] Update quasiquotes 
- [ ] Inconsistent representation of parse trees in different contexts
- [ ] scalap 
How so? The rule is simple: the syntactic category of literals is included in LiteralType. () is not a Literal in the BNF grammar. Changing these things around is costly. We'll need a very convincing reason to do so.