shurely-1 Implement an InMemory Seedable Random String Generator
Added cyclic random uri manager that predictably starts cycling to reuse strings.  mostly handy for repeatable string streams that look random and can be tested.  feels like a decent implementation to show.

Renamed UniqueStringGenerator to StringGenerator, because for many schemes they are not going to be unique (e.g. cyclic random).

Abstracted the following classes:
AbstractInMemoryStore: plug in a generator and you have a predefined scheme for in memory shortenings.  Not useful beyond examples probably.
AbstractIntegerDrivenStringGenerator: capture a place where plugging in an alphabet and using integers can generate strings.
AbstractURIManager: template implementations of shrink, follow, and also the target place for implementing configuration properties

Reimplemented generators, stores, uriManagers for basic, base32, cyclicrandom to share abstract code.  note that basic uri store uses 2 hash maps so does not inherit the abstractURIStore class - that's ok to do custom things of course.