Refactor TypeVariableName to use a single upper bound

…and use an IntersectionTypeName when appropriate to replace the
previous use of multiple bounds.
Also more reliably detect IntersectionTypes in Java 8.
Merge pull request #127 from tbroyer/typevariablename-refactor

Refactor TypeVariableName to use a single upper bound