descriptor extension by encode function
using encode_ function object to encode structures
little refactoring
union descriptor also extended
union uses encode functor too, encode_field removed entirely
discriminator is a field descriptor, not a number
discriminator reworded to discriminated
get_padding made a static method of struct and struct_packed
padding size also moved into struct classes
get padding size seems not needed
scalar field doesn't check OPTIONAL attribute in runtime
optional and non-optional composite accessors sorted out
decode_field split to sub-methods, fields descriptor extended
decode_field removed in favor of decode functor
decoding algorithm doesn't slice data and proves to be faster
little refactoring