Updated algorithm sieve

Thanks to feedback from other exercism users, I now know that lists are
implemented as arrays, and removing items from them results in a full
copy of the list, making my original implementation very non-performant.

I re-implemented using a dict, flagging values as true/false as
discovered, then building output from the True values.

Algorithm for the sieve comes from
http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes#Implementation