NSNumberについてですが
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/WorkingWithCocoaDataTypes.html#//apple_ref/doc/uid/TP40014216-CH6-ID67
AnyObject等の変換可能・不可能な型があり、その場合は数値をオブジェクトとして扱うための型「NSNumber」を利用しようという理解でいます。
(違ったらすいません。。。)
わからないのは、

class Test : NSObject {
   var testUint64: UInt64 = 0x0000000000000000
}

var test1 = Test()
var test2 = Test()
test1.setValue(test2.testUint64, forKeyPath: "testUint64")

この場合、setValueの第一引数はAnyObject?のため怒られるため、
下記のようにUInt64→NSNumberに変えると問題なかったのですが、NSNumberのサイズ?はどうなっているのか…とよくわからない次第です。

class Test : NSObject {
   var testUint64: NSNumber = 0x0000000000000000
}

上記については確かに怒られはしないのですが、
実際、 UInt64(64bit の符号ありと符号なし)の値を
get/setしたい場合はsetValueは使用できないということなのでしょうか。