Avoid using of STL containers with incomplete types.

Now array_t and object_t are not stored in boost::variant directly. Instead unique_ptr's are stored.