make rounding modes parametric types

This makes `RoundingMode` a parametric type, which hopefully will be the first step in a sane approach to dealing with rounding modes.

The key benefit is that it allows dispatch on mode. For example, in #8463, we could use:
```julia
convert(Float64,pi,RoundDown) == 3.141592653589793
convert(Float64,pi,RoundUp) == 3.1415926535897936
```
cc: @nolta