implement String#scan, add proper MatchData, specs

- implement the String#scan method
- add a proper, top-level, reusable implementation of MatchData
- use MatchData in String#=~
- add specs