Add a few C++ helper classes/macros.
- Macros to disable copying and/or assignment for a class. Although we
don't want to use macros in general, I think for this purpose the
macros actually make the code more readable (and also easier to
write).
- Simple smart pointer class (that wraps boost::scoped_ptr) to help
manage private implementation classes. In addition to managing the
memory and flagging common errors (like boost::scoped_ptr already
does), it makes the compiler issue errors when the implementation
class is modified in a const method.
Took them into use throughout the C++ code and fixed a few constness
issues.
Change-Id: Ifa9654e3a4c1979c15457ad07f7bf0462e13472f