refactored Unmarshal to use unmarshalValue which returns reflect.Value

needed for unmarshaling into reflect-created slices
more refactoring of Unmarshal