Make move/assign/initialize easier on buffer pointers

honestly i cut it because it was causing a lot of drama and holding up the rest of the proposal. i think the main problem revolved around there being two potentially contradicting count parameters when you have two UnsafeBufferPointers, since all the memorystate functions (except deinitialize) are binary operations. if you generalize the API to take an explicit count: argument, then you have 3 potentially contradicting count parameters. so yeah

also not the same as this feature but definitely related and was supposed to be making its rounds around the same time as this: Back to deallocate(capacity:) — advanced heap allocation