title: Numpy cast from signed to unsigned int with 'same_kind'
body: <p>In numpy, it looks like I can cast using <code>same_kind</code> from uint to int, but not from int to uint, which sort-of makes sense:</p>
  
  <pre><code>&gt; np.array([0, 2], dtype=np.uint8).astype(np.int64, casting='same_kind')
  array([0, 2])
  &gt; np.array([0, 2], dtype=np.int8).astype(np.uint64, casting='same_kind')
  TypeError: Cannot cast array from dtype('int8') to dtype('uint64') according to the rule 'same_kind'
  </code></pre>
  
  <p>I want to cast like this, after having checked the bounds of the values in the array (so that I know I won't lose data). But if I do <code>casting='unsafe'</code> after bounds checking, I will allow casts from eg. floats (which I don't want to permit). So how can I allow int&lt;=>uint casting but ban other types?</p>