Use boost unordered_map instead of std::unordered_map

Boost version 1.54 runs significantly faster than STL version bundled
with g++-4.8... according to euler tests.
Specialize str.join when the target uses random access iterator

Runs faster as it becomes possible to reserve enough memory.
Fix bug in constant expression analysis

Some nodes were lazily evaluated, which is not correct.
Improve implementation of __builtin__.str for long and float

stringstreams are a performance bottleneck here.
Fix typo in euler23
Improve performance of str.replace implementation
Cleaner exception handling in ConstantFolding
Minor update

* move semantic for shared_ref
* avoid a copy in dict iteration
Add more char/string comparison operators
Merge pull request #163 from serge-sans-paille/euler-perf

Euler perf