Add Name attribute to allow named injection into constructors

## The [Name] attribute
I extended Strange to include an additional attribute, [Name].  When a parameter of a constructor is tagged with [Name], the injector can discriminate between different classes that satisfy the same interface.  Here is an example:
```
public class PrintClass {
  private IPrinter printer;

 [Construct]
  public PrintClass([Name("ConsolePrinter")] IPrinter printer) {
    this.printer = printer;
  }
}
```

I've been using [Name] in my personal projects and it's been incredibly useful so far, and I think it's something other people would find useful too.  This feature comes with with its own unit tests that pass along with the existing test suite.