If you want to track by your own just create a textArea field and store all information in that with the help of trigger.
each value store formate in text Area
Stage1ABC#sd=12/12/2015#ed=2/03/2016#age=0,
sd is startDate,
ed is endDate,
age is the picklist val AGE,
'#' is the value separator
',' is Picklist value separator
Trigger for this implementation
trigger ageCalculator on TestObject__c (before insert, before update) {
if(trigger.isInsert){
for(TestObject__c obj : trigger.new){
obj.txtAreaval__c = obj.Stages__c+'#sd='+system.now()+ '#ed='+' #'+'age=0,';
}
}
if(trigger.isUpdate){
for(TestObject__c obj : trigger.new){
String oldpickListVal = trigger.oldMap.get(obj.id).Stages__c;
string picklistvalDetail = oldpickListVal+''+obj.txtAreaval__c.substringBetween(oldpickListVal, ',');
List<string> values = new List<string>();
values = picklistvalDetail.split('#');
List<string> startDate = new List<string>();
startDate = values[1].split('=');
List<string> endDate = new List<string>();
endDate = values[2].split('=');
List<string> age = new List<string>();
age = values[3].split('=');
Integer fage = Integer.valueof(age[1]);
fage += date.valueof(datetime.valueof(startDate[1])).daysBetween(date.valueof(system.now()));
string new_val = oldpickListVal+'#sd='+startDate[1]+ '#ed='+system.now()+' #'+'age='+fage ;
string finalString = obj.txtAreaval__c.replace(picklistvalDetail, new_val);
obj.txtAreaval__c = finalString ;
String pickListVal = obj.Stages__c;
integer index = obj.txtAreaval__c.indexOf(pickListVal);
if(index == -1){
obj.txtAreaval__c += pickListVal+'#sd='+system.now()+ '#ed='+' #'+'age=0,';
}else{
picklistvalDetail = pickListVal+''+obj.txtAreaval__c.substringBetween(pickListVal, ',');
values = picklistvalDetail.split('#');
startDate = values[1].split('=');
endDate = values[2].split('=');
age = values[3].split('=');
fage = Integer.valueof(age[1]);
fage += date.valueof(datetime.valueof(startDate[1])).daysBetween(date.valueof(datetime.valueof(endDate[1]))) ;
new_val = pickListVal+'#sd='+system.now()+ '#ed='+' #'+'age='+fage ;
finalString = obj.txtAreaval__c.replace(picklistvalDetail, new_val);
obj.txtAreaval__c = finalString ;
}
}
}
}