Code review

Don't merge, I'm using this as a code review branch.
a static constructor will make this more readable. Consider these two examples:

    Feature feature = FeatrueShingles(23, SizeType.Whatever) {... }

Is less readable (where does the 23 come from?) than:

    Feature feature = FeatureShingles.withSize(25, SizeType.Whatever)