Signatures as a special case of enums
Working on #383 I found that that language doesn't have a distinct tag for a signature. Instead it has 2 types of enums: `mustmatch="yes"` and `mustmatch="no"`. And this allows to match against multiple signatures. For now we don't have this distinction, instead the behavior is defined by runtime, for example for JS runtime it's OK to have properties not be a valid enum value, but python runtime raises an error in this case.

So the proposal
1 Allow a value of any type to be a enum. For example strings.
2 Widen the set of possible values for a `enum`. If the value is a string, it's a enum name. If the value is an array, it's an array of values of the same type as the property is marked with (the behavior somehow consistent to `contents`).
3 Introduce way to check if the matched value a valid enum value. Maybe as `_enum_valid`?
4 So with #81 implemented we will be able to throw on incorrect signatures and / or enum values.
5 once it is implemented, deprecate `contents`, automatically transform it into a new equivalent and remove it.

