=add polymorphic_pointer_downcast function template
add more tests and documentation example for polymorphic_pointer_downcast
Move polymorphic_pointer_downcast to a separate header, use pragma once and boost::throw_exception
Add polymorphic_pointer_cast
fix synopsis for polymorphic_pointer_cast