Add VersionConstraint.compatibleWith constructor
diff --git a/lib/src/version_constraint.dart b/lib/src/version_constraint.dart
index 29dd574..1b86602 100644
--- a/lib/src/version_constraint.dart
+++ b/lib/src/version_constraint.dart
@@ -25,11 +25,9 @@
   ///
   /// This string is one of:
   ///   
-  ///   * "any". See [any].
-  ///   * "^" followed by a version string. Versions compatible with the 
-  ///     version number. This allows versions greater than or equal to the 
-  ///     version, and less then the next breaking version (see 
-  ///     [Version.nextBreaking]).
+  ///   * "any". [any] version.
+  ///   * "^" followed by a version string. Versions compatible with 
+  ///     ([VersionConstraint.compatibleWith]) the version.
   ///   * a series of version parts. Each part can be one of:
   ///     * A version string like `1.2.3`. In other words, anything that can be
   ///       parsed by [Version.parse()].
@@ -107,7 +105,7 @@
       
       getCurrentTextIndex() => originalText.length - text.length;
       var startTextIndex = getCurrentTextIndex();
-      if(constraints.isNotEmpty || text.isNotEmpty) {
+      if (constraints.isNotEmpty || text.isNotEmpty) {
         var constraint = op + originalText.substring(startTextIndex, 
             getCurrentTextIndex());
         throw new FormatException('Cannot include other constraints with '
@@ -152,6 +150,17 @@
     return new VersionConstraint.intersection(constraints);
   }
 
+  /// Creates a version constraint which allows all versions that are 
+  /// backward compatible with [version].
+  ///
+  /// Versions are considered backward compatible with [version] if they
+  /// are greater than or equal to [version], but less than the next breaking
+  /// version ([Version.nextBreaking]) of [version].
+  factory VersionConstraint.compatibleWith(Version version) {
+    return new VersionRange(min: version, includeMin: true, 
+        max: version.nextBreaking);
+  }
+
   /// Creates a new version constraint that is the intersection of
   /// [constraints].
   ///
diff --git a/test/version_constraint_test.dart b/test/version_constraint_test.dart
index 16a3fdc..b58eab7 100644
--- a/test/version_constraint_test.dart
+++ b/test/version_constraint_test.dart
@@ -126,30 +126,26 @@
     test('parses a "^" post-1.0.0 version', () {
       var constraint = new VersionConstraint.parse('^1.2.3');
 
-      expect(constraint, equals(new VersionRange(min: v123, includeMin: true, 
-          max: v123.nextBreaking)));
+      expect(constraint, equals(new VersionConstraint.compatibleWith(v123)));
     });
 
     test('parses a "^" pre-1.0.0, post-0.1.0 version', () {
       var constraint = new VersionConstraint.parse('^0.7.2');
 
-      expect(constraint, equals(new VersionRange(min: v072, includeMin: true, 
-          max: v072.nextBreaking)));
+      expect(constraint, equals(new VersionConstraint.compatibleWith(v072)));
     });
 
     test('parses a "^" pre-0.1.0 version', () {
       var constraint = new VersionConstraint.parse('^0.0.3');
 
-      expect(constraint, equals(new VersionRange(min: v003, includeMin: true, 
-          max: v003.nextBreaking)));
+      expect(constraint, equals(new VersionConstraint.compatibleWith(v003)));
     });
 
     test('parses a "^" pre-release version', () {
       var constraint = new VersionConstraint.parse('^0.7.2-pre+1');
 
       var min = new Version.parse('0.7.2-pre+1');
-      expect(constraint, equals(new VersionRange(min: min, includeMin: true, 
-          max: min.nextBreaking)));
+      expect(constraint, equals(new VersionConstraint.compatibleWith(min)));
     });
 
     test('does not allow "^" to be mixed with other constraints', () {
@@ -177,4 +173,11 @@
       }
     });
   });
+  
+  test('compatibleWith', () {
+    var constraint = new VersionConstraint.compatibleWith(v072);
+
+    expect(constraint, equals(new VersionRange(min: v072, includeMin: true, 
+        max: v072.nextBreaking)));
+  });
 }