Initial support for named options

Given two IOptionSetup<MyOptions> registered with the same Order, I would expect a named one should take precedence over unnamed one. We can achieve that by adding a secondary key to this OrderBy, e.g. `.OrderBy(setup => new { setup.Order, !String.IsNullOrEmpty(setup.Name)})`. Currently we are not exposing Name in IOptionSetup<T> so we would need to add it. As an alternative we can consider that empty string is a separate name and don't try to do any merging.