JCLOUDS-1477: Upload single part for small B2 MPU

B2 requires two parts to use multi-part upload but jclouds will
attempt to use one with small uploads.  Instead it should fall back to
single-part when the content length is small.
diff --git a/providers/b2/src/main/java/org/jclouds/b2/blobstore/B2BlobStore.java b/providers/b2/src/main/java/org/jclouds/b2/blobstore/B2BlobStore.java
index 0069e25..c36773f 100644
--- a/providers/b2/src/main/java/org/jclouds/b2/blobstore/B2BlobStore.java
+++ b/providers/b2/src/main/java/org/jclouds/b2/blobstore/B2BlobStore.java
@@ -229,7 +229,9 @@
          throw new UnsupportedOperationException("B2 only supports private access blobs");
       }
 
-      if (options.isMultipart()) {
+      long contentLength = Preconditions.checkNotNull(blob.getMetadata().getContentMetadata().getContentLength(),
+            "must provide content-length to use multi-part upload");
+      if (options.isMultipart() && contentLength >= auth.get().recommendedPartSize()) {
          return putMultipartBlob(container, blob, options);
       } else {
          String name = blob.getMetadata().getName();
diff --git a/providers/b2/src/test/java/org/jclouds/b2/blobstore/integration/B2BlobIntegrationLiveTest.java b/providers/b2/src/test/java/org/jclouds/b2/blobstore/integration/B2BlobIntegrationLiveTest.java
index 85d37fa..b7acf98 100644
--- a/providers/b2/src/test/java/org/jclouds/b2/blobstore/integration/B2BlobIntegrationLiveTest.java
+++ b/providers/b2/src/test/java/org/jclouds/b2/blobstore/integration/B2BlobIntegrationLiveTest.java
@@ -244,36 +244,6 @@
       }
    }
 
-   @Test(groups = { "integration", "live" })
-   public void testPutBlobTierStandardMultipart() throws Exception {
-      try {
-         super.testPutBlobTierStandardMultipart();
-         failBecauseExceptionWasNotThrown(IllegalArgumentException.class);
-      } catch (IllegalArgumentException iae) {
-         throw new SkipException("B2 requires at least two parts", iae);
-      }
-   }
-
-   @Test(groups = { "integration", "live" })
-   public void testPutBlobTierInfrequentMultipart() throws Exception {
-      try {
-         super.testPutBlobTierInfrequentMultipart();
-         failBecauseExceptionWasNotThrown(IllegalArgumentException.class);
-      } catch (IllegalArgumentException iae) {
-         throw new SkipException("B2 requires at least two parts", iae);
-      }
-   }
-
-   @Test(groups = { "integration", "live" })
-   public void testPutBlobTierArchiveMultipart() throws Exception {
-      try {
-         super.testPutBlobTierArchiveMultipart();
-         failBecauseExceptionWasNotThrown(IllegalArgumentException.class);
-      } catch (IllegalArgumentException iae) {
-         throw new SkipException("B2 requires at least two parts", iae);
-      }
-   }
-
    @Override
    protected void checkTier(BlobMetadata metadata, Tier expected) {
       // B2 maps all tiers to STANDARD