Why a servo doesn`t move to angles properly
Every servo is different, they can have varying specifications:


Angular speed
Rotation range
Stall Torque
Size
Gear material/quality


Servos will vary based on brand; in addition each servo is going to have some individual variance.  So one has to characterize the servo, and discover what the proper control values are. Once the control values are established these are used to initialize the library so angular control will be accurate.


  For instance, the 0 degree angle was getting a bit bigger


I have found that errors in repeatability, like this, are usually found in the mechanism the servo is driving, especially the connection between the servo and the driven mechanisms. Check the connection for slop, see if everything is tightened properly.


  I observed that every servo (that I've tried) creates a buzzing noice for angles bigger than 170 degrees.


The typical maximum range of a servo is 160-190 degrees of rotation. The noise you are hearing is the servo trying to drive the motor to set the angle, but it is stalled as it can't turn that far.


  Should I try with a more powerful Arduino, like the Mega, which I think will be the perfect option having more GPIO than the UNO. 


IIRC the servo library can control 12 servos with a basic Arduino, and 48 with the MEGA. This difference is more than just pin count, the MEGA has 4x the hardware timers of the 328p; 12 x 4 = 48

If you need more features you can move to the MEGA, i.e. you need more PWM channels, and the servo library reduces PWM pins from 6 to 4 on the 328p. Another example could needing more timers.

Read the Arduino Servo examples for more information on usage of the servo library and control of servos, etc.