Properly validate things.
Separate Literals from ProtocolBase

When they inherit from eachother, the propensity to "do bad things"
is high because they really don't represent the same things.

Also fix more validation associated with LiteralValues
Properly check types when converting to dictionaries

The only option is for it to be a straight list or a
ProtocolBase/LiteralValue. We just call as_dict recursively
on everything