base: Fix integer conversion in MaskLeastSignificant, add more asserts

T x = (1 << bits) was being truncated for sizeof(T) > sizeof(bits).

Also add more static_asserts to BITSTRUCT_DEFINE_END to make it more
error-proof.

Test:  make test-art-{host,target}-gtest-bit_{struct,utils}_test{32,64}
Change-Id: Ifedf53c1211b4a9492ebd785c321a39d906dc87a
diff --git a/runtime/base/bit_utils.h b/runtime/base/bit_utils.h
index da3c704..5d83654 100644
--- a/runtime/base/bit_utils.h
+++ b/runtime/base/bit_utils.h
@@ -388,7 +388,8 @@
   if (bits >= BitSizeOf<T>()) {
     return std::numeric_limits<unsigned_T>::max();
   } else {
-    return static_cast<unsigned_T>((1 << bits) - 1);
+    auto kOne = static_cast<unsigned_T>(1);  // Do not truncate for T>size_t.
+    return static_cast<unsigned_T>((kOne << bits) - kOne);
   }
 }