bind/objc: remove a constructor and retain blocks
bind/objc: remove a constructor and retain blocks

A framework generated with gomobile bind -target=ios has two global
constructors: one initializing a data structure and another using it.
These constructors are defined in different translation units, which
(I believe, reasoning from C++ global constructors) means their order
of initialization is undefined.

A capturing block is stack allocated. Its memory is invalid after the
function returns. Make a copy of the interface initializer blocks so
they can be saved to the heap.

Block implementation background:
http://www.cocoawithlove.com/2009/10/how-blocks-are-implemented-and.html

Updates golang/go#12590

Change-Id: Ia7ae9f4bbd8df6e6e79949de54b3e6c48148c700
Reviewed-on: https://go-review.googlesource.com/14549
Reviewed-by: Hyang-Ah Hana Kim <d7e82c3c07f92613bcbf9a1e88f6b96c13caa3b0@gmail.com>

samanalysis/mobile,0x90sled/mobile,golang/mobile,golang/mobile,b54898533/mobile,golang/mobile,xing/gomobile,swisspol/mobile,b54898533/mobile,goldcaddy77/mobile,samanalysis/mobile,goldcaddy77/mobile,swisspol/mobile,xing/gomobile,0x90sled/mobile,ichu501/mobile,lonphy23t/mobile,MaxCy330/mobile,lonphy23t/mobile,0x90sled/mobile,goldcaddy77/mobile,lonphy23t/mobile,xing/gomobile,MaxCy330/mobile,MaxCy330/mobile,swisspol/mobile,b54898533/mobile,MaxCy330/mobile,ichu501/mobile,ichu501/mobile,samanalysis/mobile,goldcaddy77/mobile,swisspol/mobile,lonphy23t/mobile,b54898533/mobile,xing/gomobile,xing/gomobile,lonphy23t/mobile,golang/mobile,goldcaddy77/mobile,b54898533/mobile,samanalysis/mobile,swisspol/mobile,ichu501/mobile,0x90sled/mobile,samanalysis/mobile,0x90sled/mobile,ichu501/mobile,MaxCy330/mobile