Make Teline3 more object oriented.

We made the struct be virtual and defined various forms of Teline3
by deriving the base class.  Currently only LineTeline3 and
CylinderTeline3 are tried.  CylinderTelin3 is not even tested.
But I'm confident that it'll work on all the variants.

The drawback of new object oriented mechanism is that we cannot know
the size of required buffer to hold all possible forms if we disclose
the base class definition to allow user derived forms.
I'm still thinking about how to deal with this problem.
refactor: Rename tent3d_line_callback to Teline3CallbackData.

Also made it an alias to Teline3ConstructInfo instead of duplicate
definition which partially share member variable structure with Teline3.
Previous way have been compiled fine with C compiler, but it's
considered bad practice in C++ culture to define duplicate structures.
We'd use type rename or inheritance to avoid it from occurring.
Add placement new operator with Teline3List as second argument.

This way the user can define his own class deriving Teline3 to implement
custom update() and draw().
surface: Use Teline3List's placement new to implement smoke effects.

The A-10's gun fire smoke is blown away by air as the aircraft travels
through the medium.  To simulate this situation, we implement update()
to linearly damp velocity of generated smokes.

The implementation should look unfamiliar to regular C++ programmers,
because it make use of placement new syntax to reduce heap memory
allocation.  I'm still thinking if there's some better workaround to
achieve runtime performance and readability.
Add some Doxygen comments for Temporary Entities.
Add some Doxygen comments for effects.h and effects.cpp.