atoi() has undefined behavior when given a string that can't be parsed as an integer.
This patch replaces atoi() with boost_lexical_cast() and throws an exception when we get
something that's not a number.
Previously when enum values not defined in the original enum type were
used in serialized objects, FC threw exceptions when it encountered
these values. Now it just serializes unknown values to and from numbers
instead of names.
As an added benefit, the compiler now warns you if a value is defined in
the enum, but not reflected!