split template files into Gen/Reg .cpp files

this will help identify differences/commonality for refactoring.
minimize the diff between Gen/Reg versions of files

without refactoring try to minimize the differences between the
Regular and Genesis versions of the files split into new .cpp files.
use c++11's array instead of boost::array
use std::array instead of int8* in MoveLookup

std::array is just as performant as using a raw array/pointer
but will automatically manage the memory.
add *_Pawn functions to MoveLookup

split out the handling of pawns into separate *_Pawn functions.
remove TT_ENABLED

remove TT_ENABLED define which toggles transposition table updates
make isAttacked(From) call isAttacked(From, Color)

MoveLookup<GenMove> didn't implement isAttacked(From, Color) which
made it inconsistent with MoveLookup<RegMove>.
make Board<GenMove>::unmake() take a MoveFlags parameter

genesis chess doesn't currently require a MoveFlags, but adding it
to unmake() allows for duplicate code to be removed.
remove duplicate code after refactoring Board::unmake()

testing different move types after the hash fail in Engine::NegaScout()
got split out into NegaScout_hashMiss(). Terminal::divide() no longer
calls Board::getMoveList() with different move types and just uses all.
add BaseUI as a parent class of UI

UI is a template class so every specialization of the class is a
different type so the following can't be done:
	UI *a; // error requires template type
	if (genesis)
		a = new Terminal<GenMove>(): // type miss match
	else
		a = new CVEP<RegMove>();

Having a non template base class will solve this issue.
pull VERSION from git describe

pass a define flag (-DVERSION) generated by a make variable to the
compiler when building main.cpp
move the perft function into the UI class

this allows the command line perft option to allow running perft in
both regular and genesis modes.
delete copy constructor of Array and TransTable
user nullptr instead of NULL
make MoveList member variables private

improve the encapsulation of MoveList. Add support for using MoveList
in a range based for loop.
add MoveListPool to cache creating MoveList objects

caching MoveList objects resulted in about 60% increase in performance.
remove unused typedefs
use std::chrono instead of sys/time.h timeval

chrono is in the c++11 standard libraries and is easier to work with.
remove unneeded includes
update README