Changed file extension to '.kt'
 to preserve file history
Converted ConstraintSystem to Kotlin
Rewritten ConstraintPosition to Kotlin

Added ConstraintPositionKind
 (to be able to use enum constants from Java code)
Small refactoring in ConstraintSystemImpl
Extracted isMyTypeVariable, getMyTypeVariable
Fixes after merge

Added platform types fixes to rewritten to kotlin files
Rename: MyDeclarations -> ConstraintSystemTestData

Simplified code (used 'firstOrNull')
Added captured types and approximation

CapturedType captures type projection while solving the constraint system.
During the substitution type containing captured types is approximated
to get rid of captured types and (for simple cases) replace them with corresponding type projections.

Note that Array<Array< CapturedType(out Int) >> is (over)approximated by Array<out<Array<out Int>>

See 'Mixed-site variance' by Ross Tate for details.
Capture types only on the top level
++
Refactoring: made code in 'processDeclaredBoundConstraints' more kotlin
KT-6320 AssertionError in ConstraintSystem(The constraint shouldn't contain different type variables on both sides: Y <: X)
  #KT-6320 Fixed
++Capture types only on the top level
Don't add a constraint T <: DONT_CARE from upper bounds
++Added captured types and approximation
++Rename: MyDeclarations -> ConstraintSystemTestData