Using std::array:size_type size() over get_dimension()
Adding random_generator singleton for random device and engine
Individual pointers! and uniform_real_distribution

- Major refactor
- No more typedef parameter
- Proper construction using uniform_real_distribution
- No more need for weird range/scale arithmetic
- Want to subclass at some point
- More const anywhere possible
- Mutate updated per Terry's comments:
  - accepts a chance for parameter changing probability
  - accepts a delta which in problem is a ranged, not fixed
More const
HillClimbing updated for Individual pointers
Domain/range min/max, uniform_real_distribution

- Now holds chance for mutation
- Holds problems domain/range as min/max doubles, no ints
- Uses uniform_real_distribution for generating delta in range [-d, d]
- More const
- Individual pointers
- Potential and mutate functions updated
SimulatedAnnealing updated (same reason as HillClimber)

- More const
- Individual pointers
Spherical has domain, range, chance, more const

- Individual pointers
Schwefel updated for domain, range, const

- Individual pointers
Makefile updated for random_generator class
Scaling problem delta to range per Terry's advice
Updating main for Individual pointer

Man I can't believe I've been on master this whole time, oh well.