Restricted valid tags to letters, numbers, underscore, hyphen or space. I've done this to allow special punctuation characters in a future search box to have a reserved meaning and not to be confused with part of a tag.
Also removed facility to "prepare" a tag: user must pass a valid tag to constructor.
Fixed a small bug in constructor's exception creation.