Additional optimizations

After some serious Valgrind profiling love:

This PR also includes the optimize strings PR.  Kept that open because I put a couple additional comments there.

- Use more moves to save string and Error objects copying
- Avoid some unnecessary string copying (in lint functions)
- Use unordered_map and unordered_set when not needing order
  Unordered_map is faster for lookup, O(1) vs O(logn). We profiled them previously with GCC 4.8.1 to make sure, it holds even for small collections.

- StartsWith works directly with a C-String

- Replace atSequence's find_if with std::equal.  This gave a massive cut in computation.  Also got to get rid of pre-call check, as equal already does it.