Generate Function param + ValidateSet dynamically

It was annoying to always update the ValidateSet attribute each
time I added a new Function to support.  Dynamically generating
the parameter with ValidateSet works nicely.
Add post-mortem debugging aid
Don't create the WIndowsPowerShell dir with weird casing like that.
Use runtime check to allow other console-based hosts to use PSReadline.

The host check in the .psd1 only allows you to specify one host. To allow
other hosts to use PSReadline, but still try to give a helpful error to
people trying to use PSReadline in other, non-console hosts (like the ISE),
we instead do a runtime check using IModuleAssemblyInitializer, wherein we
check to see if the current process has a non-hidden console window, and
emit an error if not.