Changed to IImmutableList

Should prefer interface where possible.
Fixed using IImmutableList

Added GetOptionalTypeName(Type) helper method.
Added non-generic static class Optional with method For<T>(T value) :
Optional<T> to make it easier to create Optional<T> instances.
Changed ToImmutable() to explicitly create Optional<T> instance for each
field.
Changed DiscoverTemplateTypes to filter out non class types (useful for
creating dummy types that match actual types in same interface).
Expanded example to illustrate interface issue.

This fixes the issue of the generated ToImmutable() method being invalid
because interface typed values cannot be used as input to an implicit
conversion. This issue is still present, and using the With() method
with a variable typed as an interface will still not work - if it is
typed as an implementation of that interface it will however, as
illustrated by the various basket cases in Program.

Personally I prefer this drawback to being stuck with a specific
implementation.
Changed example of using interfaces

Removed the IFruitSize interface example and added IPlant instead.
Changed to use Optional.For instead of constructor
Changed interface example to use known interface

Changed from using IPlant to ICloneable.
Removed support for ignoring struct and interface types in
DiscoverTemplateTypes.
Added switch UseClassCollectionType

Added switch to choose between using interface or implementation.
Fixing whitespace

Changed spaces to tabs.
Reintroduced space between type and name
Fix bracket locations
Added missing line break
Fix bracket locations
Fix bracket location
Merge branch 'master' into kimbirkelund-master

Conflicts:
	Demo/Fruit.generated.cs
	Demo/Program.cs
	ImmutableObjectGraph/ImmutableObjectGraph.tt
Changes to allow using IImmutableList<T> instead of ImmutableList<T>. Closes #7